• HTML5 FormData 方法介绍以及实现文件上传


    XMLHttpRequest 是一个浏览器接口,通过它,我们可以使得 Javascript 进行 HTTP (S) 通信。XMLHttpRequest 在现在浏览器中是一种常用的前后台交互数据的方式。2008年 2 月,XMLHttpRequest Level 2 草案提出来了,相对于上一代,它有一些新的特性,其中 FormData 就是 XMLHttpRequest Level 2 新增的一个对象,利用它来提交表单、模拟表单提交,当然最大的优势就是可以上传二进制文件。下面就具体介绍一下如何利用 FormData 来上传文件。

    FormData 上传文件实例

    首先看一下formData的基本用法:FormData对象,可以把所有表单元素的name与value组成一个queryString,提交到后台。只需要把 form 表单作为参数传入 FormData 构造函数即可:

    var file;
    //获取目前上传的文件
    file = image.files[0];  //获取上传的文件名
    var formData = new FormData();
    formData.append('image', file); //append方法传入formData中

    这样就可以直接通过ajax 的 send() 方法将 fd 发送到后台。

    以下创建了一个表单 form,表单中除了普通的数据外,还有文件上传,我们直接将 form对象作为参数传入FormData对象:

    <input type="file" class="file" id="image" accept="image/gif,image/jpeg,image/jpg,image/png" />

    <button id="test" onclick="func()">demo</button>

    上述代码创建一个上传图片。

    我们初始用jquery ajax 来进行请求数据 代码如下

     1     var url = "http://localhost:8100/detection/troop/faster_R_CNN?shape=480&shape=420";
     2       image_url = "http://localhost/sss/troop.jpg";
     3       var file;
     4       //获取目前上传的文件
     5       file = image.files[0];
     6       var formData = new FormData();
     7       formData.append('image', file);
     8 
     9         $.ajax({
    10         type: "POST",
    11         url: url,
    12         data: formData,   
    13         contentType: false, //告诉jQuery不要去设置Content-Type请求头
    14         headers: {
    15           Accept: "application/json"  
    16         },
    17         processData: false, //告诉jQuery不要去处理发送的数据
    18         success: function (response) {
    19           console.log(response)
    20         }

     然后我们用XHR原生请求代码如下

    1    var url = "http://localhost:8100/detection/troop/faster_R_CNN?shape=480&shape=420";
     2       image_url = "http://localhost/sss/troop.jpg";
     3       var file;
     4       //获取目前上传的文件
     5       file = image.files[0];
     6       var formData = new FormData();
     7       formData.append('image', file);
     8        var xhr = new XMLHttpRequest();
     9        var url = "http://localhost:8100/detection/troop/faster_R_CNN?shape=480&shape=420";;
    10        xhr.open('POST', url, true);
    11        xhr.setRequestHeader("Accept", "application/json");
    12        xhr.send(formData); 

    我们发现jQuery中ajax请求和XHR对象请求参数并不一样,因为在jquery中ContenType和processData会默认处理发送的数据,会导致请求报错(500错误,jquery给默认封装了

    因此在jQuery中要加false这两个参数。就会正常的请求成功。

  • 相关阅读:
    Spring Boot 使用mysql数据库
    Nginx开启Gzip压缩大幅提高页面加载速度
    构建微服务:Spring boot 入门篇
    Python时间戳和日期的相互转换
    【Mongodb】aggregate限制返回字段
    MongoDB的skip,limit,sort执行顺序
    结对-结对四则运算生成器-最终程序
    C# List分页
    c# List的排序
    C#并行编程-Parallel
  • 原文地址:https://www.cnblogs.com/lhgis/p/9003665.html
Copyright © 2020-2023  润新知