如何在vue.js中将文件和数据附加到FormData

时间:2018-03-31 12:40:40

标签: vue.js

我正在尝试将上传的文件和数据值附加到vue.js中的FormData。在我的控制器中,只能评估文件请求。

    data() {
       return (
          file: '',
          categ: ''
        }
}

在我的方法中:

Var form = new FormData();
var file = this.file;
var cat = this.categ;
form.append('pics', file, cat);

axios.post('/api', form,
{ headers: {'Content-Type': 'multipart/form-data'}
}).then (res =>{ console.log(res)});  

我做错了什么?

2 个答案:

答案 0 :(得分:3)

问题是你如何从输入中获取文件。

如果您的输入如下:

 <input type="file"  @change="upload($event)" id="file-input">

然后你c 使用$event获取file并将其用作:

methods: {
  upload(event){
    let data = new FormData();
    let file = event.target.files[0];

    data.append('name', 'my-file')
    data.append('file', file)

    let config = {
      header : {
       'Content-Type' : 'multipart/form-data'
     }
    }

    axios.post('/api', data, config).then(
      response => {

      }
    )
  }
}

答案 1 :(得分:0)

这里是上传多个文件的解决方案。不要忘记为每个formData对象添加唯一的ID。

<input type="file" multiple :disabled="isSaving" @change="filesChange($event.target.files)" accept="your_format_here" class="input-file">

这是axios方法和我们的formData对象的创建。

  methods: {
    async save(datafile) {
      // upload data to the server
      return await axios.post(
          store.state.endpoints.baseURL + "upload/url/",
          datafile, {
            headers: {
              Authorization: 'Bearer ' + store.state.jwt
            }
          }
        )
        .then(response => {
          console.log(response)
        })
        .catch(err => {
          console.log(err.response)
        });
    },
    filesChange(fileList) {
      const formData = new FormData();
      if (!fileList.length) return;
      for (var i = 0; i < fileList.length; i++) {
        let file = fileList[i];
        // Here we create unique key 'files[i]' in our response dict
        formData.append('files[' + i + ']', file);
      }
      this.save(formData);
    }
  },