看了源码 beforeData 在 beforeUploadPromise 之前 导致 异步设置 :data 不生效 文件传不上去
到 2.3.4 版本 这个问题还没修复 所以用 http-request 实现 用 axios 上传文件
非常简单
const ossData = reactive({
action:"",
sendData:{
OSSAccessKeyId:"",
policy:"",
Signature:"",
key:"",
callback:""
}
})
:action="ossData.action"
:data="ossData.sendData"
:show-file-list="false"
:on-success="handleAvatarSuccess"
:before-upload="beforeAvatarUpload"
:http-request="handleUpload"
beforeAvatarUpload 获取 OSSAccessKeyId
policy
Signature
key
callback
action
这里省略...
handleUpload 会传入一个对象如下:
action: ""
data: {OSSAccessKeyId: '', policy: '', Signature: '', key: '', callback: ''}
file: File {uid: 1682585843600, …}
filename: "file"
headers: {}
method: "post"
onError: (err) => {…}
onProgress: (evt) => { onProgress(evt, rawFile); }
onSuccess: (res) => {…}
withCredentials: false
该有的都有
const handleUpload = (object) => {
let formdata = new FormData();
formdata.append('OSSAccessKeyId',ossData.sendData.OSSAccessKeyId);
formdata.append('policy',ossData.sendData.policy);
formdata.append('Signature',ossData.sendData.Signature);
formdata.append('key',ossData.sendData.key);
formdata.append('callback',ossData.sendData.callback);
formdata.append('file',object.file); //file 一定要在 key 之后 不然会报错?
uploadFileToOSS(formdata,ossData.action).then(res=>{
if(res.code==200){
object.onSuccess(res);
}else{
ElMessage({ message: '上传失败', type: 'error', showClose: true });
}
})
}
export function uploadFileToOSS(data,action){
return service({
url: action,
method: 'POST',
data:data,
headers: {
'Content-Type':'multipart/form-data'
}
})
}
- element-plus 组件 el-upload element 文件element-plus组件el-upload element element-ui组件el-upload element element-plus组件element功能 el-pagination element-plus pagination组件 element-plus default-time date-picker组件 element-plus农历 组件calendar 徽章element-plus组件el-badge ant-design-vue element-plus组件element 双向element-plus组件element element-plus element类型 文件