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 循环就可以取出所有的文件,这里就不做一一解释了。    

  • 相关阅读:
    遥控按键上报键值映射问题
    AutoLock类
    Mutex互斥锁
    c++ 字符串和数字转换时的特殊处理
    pytorch实现MLP并在MNIST数据集上验证
    python实现直方图均衡化,理想高通滤波与高斯低通滤波
    python实现贝叶斯网络的概率推导(Probabilistic Inference)
    python+opencv实现车牌定位
    python添加高斯噪声和椒盐噪声,实现中值滤波和均值滤波,实现Roberts算子和Sobel算子
    c++学习笔记_6
  • 原文地址:https://www.cnblogs.com/dawnyxl/p/10234913.html
Copyright © 2011-2022 走看看