input=file 通过Ajax上传

前端之家收集整理的这篇文章主要介绍了input=file 通过Ajax上传前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

input类型设为file:

  1. <label for="img_input"></label>
  2. <input id="img_input" type="file"/>

如果想上传文件,可添加multiple

  1. <input type="file" name="img" multiple="multiple" />

accept="MIME_type"限制提交的文件类型,用逗号隔开的 MIME 类型列表(服务器端也要最好类型检测双保险),如:

  1. <input type="file" accept="image/gif,image/jpeg" />
  2. <input type="file" accept="image/*"/>

获取文件内容

JavaScript:

  1. var file = document.getElementById('fileToUpload').files[0];

jQuery:

  1. var file = $("#img_input").prop("files")[0];

上传

XMLHttpRequest Level 2添加了一个新的接口FormData。利用FormData对象,我们可以通过JavaScript用一些键值对来模拟一系列表单控件。比起普通的Ajax,使用FormData的最大优点就是我们可以异步上传一个二进制文件

  1. // 创建
  2. var form_data = new FormData();
  3. // 获取文件
  4. var file_data = $("#img_input").prop("files")[0];
  5. // 把所以表单信息
  6. form_data.append("id","001");
  7. form_data.append("name","test");
  8. form_data.append("img",file_data);
  9. $.ajax({
  10. type: "POST",url: "....",dataType : "json",processData: false,// 注意:让jQuery不要处理数据
  11. contentType: false,// 注意:让jQuery不要设置contentType
  12. data: form_data
  13. }).success(function(msg) {
  14. console.log(msg);
  15. }).fail(function(msg) {
  16. console.log(msg);
  17. });

文件上传

方法一 :一次性上传多个文件

如果后台接口允许多文件上传,就把文件存到一个变量后上传

方法二 :一次性上传多个文件

如果后台接口要求单个文件,就循环获取文件信息提交,Ajax使用同步上传async: false。

跨域

JSONP是使用GET方法,无法发送文件。可以让后台开启CORS,Ajax也使用跨域crossDomain: true即可。

  1. $.ajax({
  2. type: "POST",crossDomain: true,// 注意:让jQuery不要设置contentType
  3. data: form_data
  4. }).success(function(msg) {
  5. console.log(msg);
  6. }).fail(function(msg) {
  7. console.log(msg);
  8. });

转载地址

猜你在找的Ajax相关文章