12

我需要使用 IE9 必须支持的 ajax 上传文件。我使用的是这里提到的 FormData 。我的代码如下所示:

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 端解析。任何有关如何解决此问题的帮助或指示将不胜感激。我需要适用于所有浏览器的东西。

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

4

1 回答 1

18

不幸的是,您不能使用 Ajax(XMLHttpRequest换句话说)来发送文件,但是您可以使用<iframe/>带有 a 的 a来实现类似的行为<form method="post" enctype="multipart/form-data"/>,其中包含<input type="file"/>使用“自然”方式发送用户选择的文件。您可以使用javascript调用父文档中的form.submit()then poll<iframe/>来检查文件上传过程是否完成。

jQuery很多很酷的插件可以完成这项工作,例如我最喜欢的一个。

于 2012-11-21T16:30:33.357 回答