【发布时间】:2020-06-26 06:42:51
【问题描述】:
我一直致力于使用表单数据和获取(POST 请求)上传单个文件。但是,我遇到了上传多个文件的问题。以下是我的代码:
vue.js 的 HTML 部分:
<el-button @click="post_visible = true">POST</el-button>
<el-dialog :visible.sync="post_visible" title="Adding a new value!">
<span>Image_1</span>
<input type="file" name="file1" />
<br>
<br>
<span>Image_2</span>
<input type="file" name="file2" />
<br>
<br>
<span>Image_3</span>
<input type="file" name="file3" />
<br>
<br>
<el-button @click = "submit"> Submit </el-button>
</el-dialog>
Javascript 部分:
methods:{
submit(){
var formData = new FormData();
var fileField = document.querySelector("input[type='file']");
console.log(fileField.files.length) // printing the length of the fileField.files.
// attaching the files.
formData.append('file', fileField.files[0]);
formData.append('file', fileField.files[1]);
formData.append('file', fileField.files[2]);
const headers = new Headers();
headers.append('Authorization', 'Bearer '+ token); // tokenhas been initialized
const body = formData;
const init = {
method: 'POST',
headers,
body
};
fetch('http://*********/****', init)
.then((response) => {
return response.json(); // or .text() or .blob() ...
})
.then((text) => {
// text is the response body
})
.catch((e) => {
// error in e.message
});
}
}
我收到 500 错误(这是一个内部服务器错误)。服务器没有问题,因为我使用工具“AdvancedRestClient”成功地向 api 发出了(200)张贴请求。我意识到问题在于上传文件。当我打印出 fileField.files 的长度时,它是 1。它应该是 3,但我只得到 1。另外,我在网页上看到(在检查网页后),formdata 对象有仅包含 1 个文件,其他两个文件的值未定义。这意味着我在代码中搞砸了一些东西来上传多个文件。任何帮助确定我的错误或任何其他替代解决方案将不胜感激。
谢谢。
【问题讨论】:
-
是的。
fileField[0].files[0],.fileField[1].files[0]。因为您没有使用带有multiple的单个输入,而是使用多个输入。您还需要querySelectorAll,因为您有3 个输入,而不仅仅是1 个。 -
感谢您的回答。但是您的上述解决方案不起作用。
标签: javascript vue.js fetch multipartform-data form-data