使用在IE9中工作的ajax发送文件/文件上载

时间:2012-11-20 22:36:35

标签: jquery ajax internet-explorer file-upload multipartform-data

我需要使用必须在IE9中支持的ajax上传文件。我正在使用FormData,如here所述。我的代码如下所示:

var files = new FormData();
JQuery.each($('#file')[0].files, function (i, file) {
    files.append('file', file);
});

$.ajax({
    type: "POST",
    url: '/url',
    cache: false,
    contentType: false,
    processData: false,
    data: files,
    ...
});

这在Safari和Firefox中运行良好,但在IE9中失败,因为IE9不支持FormData。我尝试通过设置:

作为文件发送
data: $('#file')[0].files[0]
contentType: 'multipart/form-data'

这会失败,因为数据是以url编码的形式发送的,并且无法在java端解析。任何有关如何解决这个问题的帮助或指针将不胜感激。我需要适用于所有浏览器的东西。

编辑:我不需要任何上传进度条,因为文件通常很小。我不需要上传多个文件。我只需要上传一个文件。

1 个答案:

答案 0 :(得分:18)

不幸的是,您无法使用Ajax(换句话说XMLHttpRequest)来发送文件,但是您可以使用<iframe/><form method="post" enctype="multipart/form-data"/>包含<input type="file"/>来实现类似的行为}使用&#34; natural&#34;发送用户选择的文件。办法。您可以使用javascript调用form.submit(),然后从父文档中轮询<iframe/>以检查文件上载过程是否已完成。

jQuerya lot of cool plugins来完成这项工作,例如my favorite one