zoukankan      html  css  js  c++  java
  • 【转】vue 使用 axios 上传文件 --- FormData

    原文链接:https://blog.csdn.net/nimoyaoww/article/details/79400885

    在此主要介绍 如何使用 formData 对象上传单文件和多文件,FormData 就是 XMLHttpRequest Level 2 新增的一个对象,利用它来提交表单、模拟表单提交,当然最大的优势就是可以上传二进制文件。

    一: 前台上传文件的表单和响应函数

    <!--文件上传表单-->
    <form>
    <input type="text" value="" v-model="name" placeholder="请输入用户名">
    <input type="text" value="" v-model="age" placeholder="请输入年龄">
    <input type="file" @change="getFile($event)">
    <input type="file" @change="getFile2($event)">
    <button @click="submit($event)">提交</button>
    </form>

    表单可以根据自己需要选择合适的表单,我在此选用的原生表单。

    vue 定义文件数据类型:

    data () {
      return{
        //文件
        file: '',
        file2: '',
      }
    },

    表单按钮的响应函数

    getFile(event) {
      this.file = event.target.files[0];
      console.log(this.file);
    },
    getFile2(event) {
      this.file2 = event.target.files[0];
      console.log(this.file2);
    },

    上传单文件和多文件其实都是一样,主要的区别在后台接受文件形式和前台如何向后台传递数据,主要区别在 submit 响应函数中。

    单文件例子:

    submit(event) {
      event.preventDefault();//取消默认行为
      //创建 formData 对象
      let formData = new FormData();
      // 向 formData 对象中添加文件
      formData.append('file',this.file);
      
      http.uploadFile("taskManage/uploadFile2",formData).then(function (response) {
        console.log("res: ",response);
      })
    },

    多文件例子:

    submit(event) {
      event.preventDefault();//取消默认行为
      //创建 formData 对象
      let formData = new FormData();
      // 向 formData 对象中添加文件
      formData.append('file',this.file);
      formData.append('file',this.file2);
      
      http.uploadFile("taskManage/uploadFile2",formData).then(function (response) {
        console.log("res: ",response);
      })
    },

     注: http.uploadFile 是原作者自己封装的方法,用来上传文件的,为了防止文章没有针对性,就分开写了。有需要的,请查阅:http://blog.csdn.net/nimoyaoww/article/details/79401346    

    此时如果想在前台打印文件信息使用如下方式:   

        console.log(formData);//输出为空
        console.log(formData.get("file"));//单文件
        console.log(formData.getAll("file"));//多文件

    二、后台接受文件

    控制器主要有一个全局的注解:

    @RequestMapping("taskManage")
    单文件的格式:

    /**
    * 文件接收控制器
    */
    @PostMapping("uploadFile")
    public Object multipleSave(@RequestParam("file") MultipartFile file){
    logger.info("上传的文件:",file);
    logger.info("上传的文件");
    return null;
    }


    多文件格式:

        后台接受方式有两种,两种都有不同的通途。

    接受的文件个数为有限个时:

    /**
    * 文件接收控制器
    */
    @PostMapping("uploadFile")
    public Object multipleSave(@RequestParam("file") MultipartFile file,@RequestParam("file2") MultipartFile file2){
    logger.info("上传的文件:",file);
    logger.info("上传的文件2:",file2);
    logger.info("上传的文件");
    return null;
    }

    接受文件个数为无限个时:

    @PostMapping("uploadFile")
    public Object multipleSave(@RequestParam("file") MultipartFile[] file){
    logger.info("上传的文件:",file);
    logger.info("上传的文件");
    return null;
    }


    利用数组的格式接收多文件,利用 for 循环就可以取出所有的文件,这里就不做一一解释了。    

  • 相关阅读:
    bootstrap-table设置表头宽度无效的解决方案
    bootstrap-table设置某列序号自增
    arguments.callee
    javascript中break和continue
    javascript数据类型
    <script>标签的属性
    javascript核心
    javascript中数据属性与访问器属性
    解决ie9以下下不支持html5和媒体查询(Media Queries)
    用firefox获取html页面元素的Xpath
  • 原文地址:https://www.cnblogs.com/dawnyxl/p/10234913.html
Copyright © 2011-2022 走看看