异步 JQUERY 文件上传

Posted

技术标签:

【中文标题】异步 JQUERY 文件上传【英文标题】:Asynchronous JQUERY File Upload 【发布时间】:2013-02-11 09:49:16 【问题描述】:

我有一个文件输入类型的 html 表单。我需要将表单异步提交到服务器。服务器侦听传入的文件上传(多部分文件上传)请求。是否可以使用 jquery 来实现这一点。

【问题讨论】:

How can I upload files asynchronously with jQuery? 的可能重复项 【参考方案1】:

如果支持FormData 和File API(两种HTML5 功能),您可以轻松使用jQuery 的$.ajax() 方法发送文件。

您也可以发送文件without FormData,但无论哪种方式,文件 API 都必须存在以处理文件,以便它们可以通过 XMLHttpRequest (Ajax) 发送。

$.ajax(
  url: 'file/destination.html', 
  type: 'POST',
  data: new FormData($('#formWithFiles')[0]),  // The form with the file inputs.
  processData: false  // Using FormData, don't process data.
).done(function()
  console.log("Success: Files sent!");
).fail(function()
  console.log("An error occurred, the files couldn't be sent!");
);

如需快速、纯 javascript 示例,请参阅“Sending files using a FormData object”。

如果您想为旧版浏览器添加一个回退,或者如果您只想要一个跨浏览器实现,请使用Bifröst。它增加了一个额外的jQuery Ajax transport 允许发送文件 与飞机旧$.ajax()

只需添加 jquery.bifrost.js 并发出请求:

$.ajax(
  url: 'file/destination.html', 
  type: 'POST',
  // Set the transport to use (iframe means to use Bifröst)
  // and the expected data type (json in this case).
  dataType: 'iframe json',                                
  fileInputs: $('input[type="file"]'),  // The file inputs containing the files to send.
  data:  msg: 'Some extra data you might need.'
).done(function()
  console.log("Success: Files sent!");
).fail(function()
  console.log("An error occurred, the files couldn't be sent!");
);

祝你好运!

【讨论】:

【参考方案2】:

是否可以使用 jquery 来实现。

不,不是直接使用 jQuery。

您可以使用 HTML5 文件 API:https://developer.mozilla.org/en-US/docs/Using_files_from_web_applications

或者,如果您需要支持旧版浏览器,您可以使用一些插件,例如 UploadifyFine UploaderjQuery form plugin

【讨论】:

【参考方案3】:

我会看看这个 jQuery 插件:

http://malsup.com/jquery/form/#file-upload

【讨论】:

以上是关于异步 JQUERY 文件上传的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 jQuery 异步上传文件?

如何使用 jQuery 异步上传文件?

如何使用 jQuery 异步上传文件?

一个模拟异步文件上传的jQuery插件。

Jquery FormData文件异步上传 快速指南

求一段JS或Jquery异步上传图片的代码