我正在尝试将上传的文件和数据值附加到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)});
我做错了什么?
答案 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);
}
},