Reputation: 1
I want to use FormData to carry pictures as file,and transform it to flask by axios.
<el-upload
action=""
ref="pictures"
list-type="picture-card"
:on-preview="handlePictureCardPreview"
:on-change="handlechange"
:on-remove="handleRemove"
:http-request="importFile"
:file-list="fileList"
id="upload1"
multiple
>
<el-icon><Plus /></el-icon>
</el-upload>
<el-dialog v-model="dialogVisible">
<img w-full :src="dialogImageUrl" alt="Preview Image" />
</el-dialog>
</el-main>
<el-footer>
<el-button style="display:block;margin:0 auto" @click="submitUpload" type="primary"> 确认</el-button>
</el-footer>
<script lang="ts" >
import {Location, Setting,Plus} from '@element-plus/icons-vue';
import {reactive ,ref} from 'vue';
import type{UploadProps, UploadUserFile} from 'element-plus'
import axios from 'axios';
const dialogImageUrl = ref('')
const dialogVisible = ref(false)
var myList:any[]=[]
var formData:any=null
export default {
components: {
Location, Setting
},
data(){
return {
myList:[],
updata:{},
fileList: [],
formData: null,
dialogImageUrl,
dialogVisible,
}
},
methods:{
handlechange(file:any,fileList:any){
myList = fileList
},
importFile(){
formData=new FormData()
myList.forEach(item=>{formData.append('file',item.raw,item.raw.name)
})
},
handleRemove(file:any,fileList:any){
myList=fileList
},
handlePictureCardPreview(file:any){
dialogImageUrl.value = file.url;
dialogVisible.value = true;
// console.log(dialogImageUrl.value);
},
submitUpload(){//点击按钮提交fileList中的文件
console.log("submitUpload")
let config = {
headers: { "Content-Type": "multipart/form-data" },
}
console.log(formData.get('file'))
axios.post("http://localhost:5000/picturesUpload",formData, config)
},
}
but flask just get none request,when I use print(request.files) or print(request.form) it's ImmutableMultiDict([]). while checking chrome i get this,so is the formdata transformed correctly?:
------WebKitFormBoundary5PSAO7r32arNACHu
Content-Disposition: form-data; name="file"; filename="xx.png"
Content-Type: image/png
------WebKitFormBoundary5PSAO7r32arNACHu
that is so confusing.how could I handle it?
Upvotes: 0
Views: 100
Reputation: 8592
I know this issue from a previous version of axios. Using version 0.27.2 and the following code was the solution for me.
I hope it helps. Unfortunately I can't tell you more about it.
<template>
<el-upload
action=""
list-type="picture-card"
:on-preview="handlePictureCardPreview"
:file-list="fileList"
:auto-upload="false"
multiple
>
<el-icon><Plus /></el-icon>
</el-upload>
<el-dialog v-model="dialogVisible">
<img w-full :src="dialogImageUrl" alt="Preview Image" />
</el-dialog>
<el-button style="display:block;margin:0 auto" @click="submitUpload" type="primary">Submit</el-button>
</template>
<script lang="ts">
import { ref } from 'vue'
import { Plus } from '@element-plus/icons-vue'
import type { UploadProps, UploadUserFile } from 'element-plus'
import axios from 'axios';
export default {
setup() {
const dialogImageUrl = ref('');
const dialogVisible = ref(false);
const fileList = ref<UploadUserFile[]>([]);
return {
dialogVisible,
dialogImageUrl,
fileList
};
},
components: {
Plus
},
methods: {
handlePictureCardPreview(uploadFile:any) {
this.dialogImageUrl = uploadFile.url!;
this.dialogVisible = true;
},
submitUpload() {
const formData = new FormData();
this.fileList.forEach(item => {
formData.append('file[]', item.raw, item.raw.name);
});
axios.post('http://localhost:5000/upload', formData)
.then(() => {
this.fileList.splice(0, this.fileList.length);
});
}
}
}
</script>
from flask import (
Flask,
request
)
from flask_cors import CORS
app = Flask(__name__)
CORS(app)
@app.post('/upload')
def upload():
uploaded_files = request.files.getlist('file[]')
print(uploaded_files)
return '', 200
Upvotes: 0