Javascript文件上传在Chrome中不起作用
我已经实现了以下JS代码来上传文件。 在IE中,它工作正常,但在Chrome中,我在服务器端获得一个空文件。 我使用Fiddler查看了请求数据,发现该请求不包含Chrome中的文件数据(在IE中它)。 它看起来像这样:
----WebkitFormBoundary4kjth5kjt54h
Content-Disposition: form-data; name="C:fakepathfile.txt"; filename=""
Content-Type: application/octet-stream
----WebkitFormBoundary4kjth5kjt54h--
在IE中它看起来像:
----------------7dd435hb8d7gs34
Content-Disposition: form-data; name="C:fakepathfile.txt"; filename="file.txt"
Content-Type: text/plain
The file data bla bla bla
----------------7dd435hb8d7gs34--
所以客户端一定有问题,但我无法弄清楚它是什么。
这个代码在用户点击一个按钮时被激活。
请不要建议创建一个常规的HTML <form>
标签,因为我的情况不能实现。 它必须使用JavaScript来完成。
var form = document.createElement("FORM");
form.method = "post";
form.style.display = "none";
// adding some input elements to the form...
// ...
// adding the file input
form.enctype = "multipart/form-data";
var fileInputs = jQuery("input:file");
fileInputs.each(function() {
if (this.value != "") {
form.appendChild(this);
}
});
form.action = "my.servlet.path";
form.submit();
编辑:新的信息:我注意到在网络选项卡中的铬devtools请求状态是“取消”。 那是什么意思? 请求确实到达服务器,所以取消了什么? 为什么?
解决了
好的,我发现了这个错误。 我在这里发布的代码是实际发生的模拟版本。 实际发生的情况是,在form.submit()
和KnockOut获取该更新之前,在页面上更新了一些全局数据,并用空值更新了<input type="file">
。 然后显然这个文件没有被发送到服务器。
更改后,它可以正常工作,但请求在“网络”选项卡中仍显示为已取消。 不知道为什么...
链接地址: http://www.djcxy.com/p/36429.html上一篇: Javascript file upload not working in Chrome
下一篇: What does status=canceled for a resource mean in Chrome Developer Tools?