基於Vue、Element-ui,封裝組件為例子聊聊如何實現這個功能。其它組件實現方式思路一樣的!
1. 雲儲存方式
常見的有七牛雲,OSS(阿里雲)等,這些雲平台提供API接口,調用相應的接口,文件上傳后會返回圖片存儲在服務器上的路徑,前端獲得這個路徑保存下來提交給后端即可。流程很簡單。
主要步驟:
- 向后端發送請求,獲取oss配置數據
- 文件上傳后,調用oss提供接口。
- 文件上傳完成,文件儲存在服務器相關路徑
- 以接口的形式將返回的路徑字段返回給前端,存到表單對象中。
代碼
視圖層代碼
<el-upload
class="avatar-uploader"
action="noAction"
:headers="{ 'Content-Type': 'application/x-www-form-urlencoded' }"
:show-file-list="false"
:on-success="handleAvatarSuccess"
:http-request="fileRequestBackId"
:before-upload="beforeAvatarUpload">
<img v-if="query.authenticationInfo.backId"
:src="query.authenticationInfo.backId" class="avatar">
<div v-else class="avatar-uploader">
<i class="el-icon-plus avatar-uploader-icon"></i>
<span class="addText">上傳身份證</span>
</div>
</el-upload>
elementUI的上傳組件,http-request方法: 覆蓋默認的上傳行為,可以自定義上傳的實現。
formData是ajax2.0(XMLHttpRequest Level2)新提出的接口,利用FormData對象可以將form表單元素的name與value進行組合,實現表單數據的序列化,從而介紹表單元素的拼接,提高工作效 率。
const params = new FormData() //創建FormData params.append('file', item.file) uploadFileToSecretOss(params).then(res => { if (res.data.code === '0') {
// 拿到返回的上傳路徑,res.data.uploadUrl, 去提交表單
// doSomethings
} else {}
})
},
