Javascript文件上传无法在Chrome中运行

时间:2013-08-12 07:04:27

标签: javascript forms internet-explorer google-chrome file-upload

我已经实现了以下JS代码来上传文件。 在IE中它工作正常,但在chrome中我在服务器端获得一个空文件。 我使用Fiddler查看了请求数据,发现该请求不包含Chrome中的文件数据(在IE浏览器中)。它看起来像这样:

----WebkitFormBoundary4kjth5kjt54h
Content-Disposition: form-data; name="C:\fakepath\file.txt"; filename=""
Content-Type: application/octet-stream


----WebkitFormBoundary4kjth5kjt54h--

在IE中看起来像:

----------------7dd435hb8d7gs34
Content-Disposition: form-data; name="C:\fakepath\file.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();

修改 新信息:我在网络选项卡中的chrome devtools中注意到请求状态为“已取消”。 那是什么意思?请求 到达服务器,取消了什么?为什么?


解决

好的,我发现了这个错误。我在这里发布的代码是实际发生的代码的简化版本。 真正发生的事情是form.submit()之前页面上的某些全局数据有更新,KnockOut选择了该更新并使用空值更新了<input type="file">。显然文件没有发送到服务器。

更改后,它工作正常,但请求仍显示为网络选项卡中的已取消。不知道为什么......

0 个答案:

没有答案