如何使用带有vue的fastapi上传文件?我收到无法处理的错误 422
How to upload file using fastapi with vue? I got error unprocessable 422
我正在尝试将文件上传到目录中,我在 Python 中使用 vue.js 和 fastapi。
但是每次报错422 unprocessable function
我试过这样使用官方文档:
<!-- Vue Template -->
<input
style="display: none"
type="file"
name="files"
ref="fileAdd"
v-on:change="handleFilesChange()"
/>
// Vue Script
handleFilesChange() {
var uploadedFiles = this.$refs.fileAdd.files;
if (uploadedFiles.length > 0) {
for (var i = 0; i < uploadedFiles.length; i++) {
this.files.push(uploadedFiles[i]);
var formData = new FormData();
formData.append("files", this.$refs.fileAdd.files[0]);
axios
.post(url + "/uploadfile", formData, {
headers: {
"Content-Type": "multipart/form-data",
},
onUploadProgress: (uploadStatus) => {
this.uploadProgress = Math.round(
(uploadStatus.loaded / uploadStatus.total) * 100
);
this.isUplading = true;
},
})
.then((response) => {do something}
}
}
}
# FastAPI endpoint
@app.post('/uploadfile')
async def upload_file(sid: str, files: List[UploadFile]=File(...)):
print(files)
if(files == []):
print("No Files")
else:
print(files[0].filename)
#...do something
我收到无法处理的错误 422。
知道如何解决这个问题吗?
我不是 vuejs 专家(也不是 javascript),但我认为问题在于你传递给 axios 的内容:
formData.append("files", this.$refs.fileAdd.files[0]);
在上面一行中,你(据我了解 vuejs 和你的代码)是一个文件([0]
)而不是文件数组。
想法是传递一个文件数组,我想可以这样实现:
formData.append("files", this.$refs.fileAdd.files);
或
formData.append("files", [this.$refs.fileAdd.files[0]]);
类似的问题已经有人提出并回答了,所以可能值得一看
我正在尝试将文件上传到目录中,我在 Python 中使用 vue.js 和 fastapi。
但是每次报错422 unprocessable function
我试过这样使用官方文档:
<!-- Vue Template -->
<input
style="display: none"
type="file"
name="files"
ref="fileAdd"
v-on:change="handleFilesChange()"
/>
// Vue Script
handleFilesChange() {
var uploadedFiles = this.$refs.fileAdd.files;
if (uploadedFiles.length > 0) {
for (var i = 0; i < uploadedFiles.length; i++) {
this.files.push(uploadedFiles[i]);
var formData = new FormData();
formData.append("files", this.$refs.fileAdd.files[0]);
axios
.post(url + "/uploadfile", formData, {
headers: {
"Content-Type": "multipart/form-data",
},
onUploadProgress: (uploadStatus) => {
this.uploadProgress = Math.round(
(uploadStatus.loaded / uploadStatus.total) * 100
);
this.isUplading = true;
},
})
.then((response) => {do something}
}
}
}
# FastAPI endpoint
@app.post('/uploadfile')
async def upload_file(sid: str, files: List[UploadFile]=File(...)):
print(files)
if(files == []):
print("No Files")
else:
print(files[0].filename)
#...do something
我收到无法处理的错误 422。
知道如何解决这个问题吗?
我不是 vuejs 专家(也不是 javascript),但我认为问题在于你传递给 axios 的内容:
formData.append("files", this.$refs.fileAdd.files[0]);
在上面一行中,你(据我了解 vuejs 和你的代码)是一个文件([0]
)而不是文件数组。
想法是传递一个文件数组,我想可以这样实现:
formData.append("files", this.$refs.fileAdd.files);
或
formData.append("files", [this.$refs.fileAdd.files[0]]);
类似的问题已经有人提出并回答了,所以可能值得一看