【问题标题】:Sending files /file upload using ajax which works in IE9使用在 IE9 中工作的 ajax 发送文件/文件上传
【发布时间】:2012-11-20 22:36:34
【问题描述】:

我需要使用 IE9 必须支持的 ajax 上传文件。我正在使用 here 中提到的 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 端解析。任何有关如何解决此问题的帮助或指示将不胜感激。我需要适用于所有浏览器的东西。

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

【问题讨论】:

  • 我在这里发现了一个类似的问题:stackoverflow.com/questions/2320069/jquery-ajax-file-upload
  • 我不能使用 '
    ' 形式指定动作,因为可以有多个动作,取决于用户输入。所以我在上传按钮上有一个“点击”动作,它决定了我们从用户那里得到的输入类型并相应地重定向。我们之前确实有这个并且它正在工作,但现在要求更改为根据用户输入重定向到不同的 url/函数。

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


【解决方案1】:

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

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

【讨论】:

  • 这个答案看起来也很有用:stackoverflow.com/questions/166221/…
  • 谢谢丹尼哈尔。这解决了我的问题。期待IE10
  • 您可以使用 blob 数据将文件发送到服务器。
猜你喜欢
  • 1970-01-01
  • 2014-04-05
  • 2015-01-16
  • 2015-02-10
  • 2018-03-18
  • 1970-01-01
  • 1970-01-01
  • 2016-06-23
  • 1970-01-01
相关资源
最近更新 更多