问题描述
我正在尝试使用 Vue js 将图像上传到服务器,但听起来 Axios 没有向后端发送任何数据。后端是 ASP.netCore API。这很简单,我之前制作了这个表单,用于通过 fetch 将数据提交到服务器,并且效果很好! 你看有什么不对吗? 你可以在下面看到我的代码:
<template>
<h1>Uploading an Image!</h1>
<p>This component demonstrates Uploading Image to server.</p>
<div>
<form>
<input type="file" v-on:change="getFile($event)" />
<button v-on:click="submitForm($event)">Upload</button>
</form>
</div>
</template>
<script>
import axios from 'axios'
export default {
name: "Upload1",data() {
return {
selectedFile: " ",uploadResult: " "
}
},methods: {
getFile(event) {
this.selectedFile = event.target.files[0];
console.log(this.file);
},submitForm(event) {
event.preventDefault();
let formData = new FormData();
formData.append("ImageData.File",this.selectedFile);
let config = {
headers: {
"Content-Type": "multipart/form-data"
}
};
axios.post('/api/Image',{
formData,config
}).then(resposne => resposne.json())
.then(data => {
console.log(data);
this.uploadResult = "File " + data.fileName + " successfully uploaded."
});
}
}
};
</script>
解决方法
尝试像这样重构请求:
event.preventDefault();
let formData = new FormData();
formData.append("ImageData.File",this.selectedFile);
let config = {
headers: {
"Content-Type": "multipart/form-data"
}
};
axios({
baseURL: 'https://some-domain.com/api/',// your backend base url
method: 'post',url:'/api/Image',data:formData,...config
}).then(resposne => resposne.json())
,
我将 formData 和 config 包装在一个对象中。它们应该是传递给 post 的第二个和第三个参数,如下所示:
axios.post('/api/Image',formData,config)
问题解决了!