如何使用JavaScript从中获取(视频)文件,并通过XMLHttpRequest()发送请求。

18 浏览
0 Comments

如何使用JavaScript从中获取(视频)文件,并通过XMLHttpRequest()发送请求。

假设页面上有这个元素:\n


\n这将在网页上创建一个按钮,允许用户通过浏览器中的操作系统“文件打开...”对话框选择文件。\n假设用户点击了该按钮,在对话框中选择了一个文件,然后点击“确定”按钮关闭对话框。\n所选文件的名称现在存储在:\n

document.getElementById("image-file").value

\n现在,假设服务器在URL“/upload/image”处理多部分POST请求。\n如何将文件发送到“/upload/image”?\n还有,如何监听文件上传完成的通知?

0
0 Comments

问题的原因是作者想要通过JavaScript从元素中获取视频文件,并将文件通过XMLHttpRequest发送请求。作者尝试了一些答案,但都没有成功。

解决方法是作者使用了fetch()函数来发送PUT请求,并将文件作为请求的body参数。作者还在JavaScript代码中定义了一个名为doupload()的函数,在该函数中获取了文件对象,并将其通过fetch()函数发送请求。最后,作者还使用alert()函数弹出上传成功的提示,并使用location.reload()函数刷新页面。

在示例代码中,作者使用了元素和一个提交按钮。作者在按钮的onclick事件中调用了doupload()函数。

还有PUT方法与POST方法略有不同,而在作者使用的web server for chrome中,未实现POST方法。作者推荐使用web server for chrome来测试这段代码,并提到在该工具中需要启用文件上传功能,否则会出现不允许上传的错误。

0
0 Comments

问题的出现原因:使用XMLHttpRequest发送请求时,使用选择的文件没有包含在请求的参数中。

解决方法:使用FormData对象将文件添加到请求中。

文章内容如下:

如何使用JavaScript从中获取(Video)文件并通过XMLHttpRequest()发送请求

如果你只是想通过ajax上传文件,只需将表单提交到/upload/image。

如果你想在后台上传图片(例如不提交整个表单),你可以使用ajax:

- [Asynchronous file upload (AJAX file upload) using jsp and javascript](https://stackoverflow.com/questions/1276916)

- [jQuery Ajax File Upload](https://stackoverflow.com/questions/2320069)

- [Ajax using file upload](https://stackoverflow.com/questions/502375)

或者使用iframe和带有图像上传器脚本的src=""的0x0大小,然后将表单提交到它,并使用target="iframeId"读取iframe src上的结果,可以使用jQuery绑定.load事件。

现在,实际上可以通过JavaScript和Ajax进行投票,参见:[stackoverflow.com/a/10811427/694469](http://stackoverflow.com/a/10811427/694469)(我没有投反对票)。

我尝试了这种方法,但是请求选项似乎不包含服务器上的图像文件。

0
0 Comments

从上面的内容可以整理出以下问题的出现原因和解决方法:

问题:如何使用JavaScript从获取(Video)文件并通过XMLHttpRequest()发送请求。

原因:在现有的代码中,通过JavaScript从元素中获取文件并发送请求。

解决方法:使用纯JavaScript的方法或旧的xhr方法来实现。

纯JS方法:

let photo = document.getElementById("image-file").files[0];
let formData = new FormData();
formData.append("photo", photo);
fetch('/upload/image', {method: "POST", body: formData});

旧的xhr方法:

let photo = document.getElementById("image-file").files[0];
let req = new XMLHttpRequest();
let formData = new FormData();
formData.append("photo", photo);
req.open("POST", '/upload/image');
req.send(formData);

- 在服务器端,可以通过formData参数读取原始文件名等信息。

- 不需要设置请求头Content-Type为multipart/form-data,浏览器会自动设置。

- 可以使用完整的地址(如http://.../upload/image)来代替/upload/image。

- 如果要在单个请求中发送多个文件,请使用multiple属性和类似的方式将所有选择的文件附加到formData中。

- 可以在请求中包含附加的数据(json)。

- 可以设置超时时间。

- 这些解决方案适用于所有主要浏览器。

formData === form submit enctype="multipart/form-data"

当出现net::ERR_ABORTED 405 (Method Not Allowed)错误时,通常是服务器未为URL实现POST方法。

出现POST http://localhost:8000/upload/image 404 (Not Found)错误时,可能是服务器未识别URL的问题。

注意:Houston拼写错误,正确拼写为Houston。

0