
之前写图片上传都是通过自定义方法将file和OSS信息组装到formData里面然后设置请求头’Content-Type’: ‘multipart/form-data’来上传的,现在直接用自带的action上传还是挺方便的。
<template><a-upload:action="urlhost"listType="picture-card"accept="image/*"@preview="handlePreview"@change="handleChange":remove="removeImg":beforeUpload="beforeUpload":data="paramsData"><a-icon type="plus" /><div class="ant-upload-text">点击上传</div></a-upload><a-modal :visible="previewVisible" :footer="null" @cancel="handleCancel"><img alt="example" style="width: 100%" :src="previewImage" /></a-modal></template><script>function getBase64(file) {return new Promise((resolve, reject) => {const reader = new FileReader();reader.readAsDataURL(file);reader.onload = () => resolve(reader.result);reader.onerror = error => reject(error);});}import {getOssSignWeb} from '../../../api/upload.js'; //获取后端OSS信息接口export default {return {businessId:'',//业务idpreviewVisible:false,previewImage: '',paramsData:{ //OSS信息对象 也是用来需要上传的参数'OSSAccessKeyId':'','policy':'','Signature':'','key':'','success_action_status':200},urlhost:'', //上传路径},methods: {async handlePreview(file) { //点击图片预览if (!file.url && !file.preview) {file.preview = await getBase64(file.originFileObj);}this.previewImage = file.url || file.preview;this.previewVisible = true;},beforeUpload(file, fileList){ //在上传前获取OSS信息return new Promise((resolve,reject)=>{let params ={"businessId":this.businessId,"suffix":'.jpg'}getOssSignWeb(params).then(res=>{this.urlhost = res.retData.hostthis.paramsData = { //组装参数'OSSAccessKeyId':res.retData.accessid,'policy':res.retData.policy,'Signature':res.retData.signature,'key':res.retData.dir+res.retData.fileName,'success_action_status':200}resolve(file)}).catch(e=>{reject()})})},removeImg(){return new Promise((resolve,reject)=>{this.$confirm({title: '提示',content: '是否删除这张图片',okText: '确定',okType: 'danger',cancelText: '取消',onOk() {resolve(true)},onCancel() {resolve(false)},})})},handleChange(info) {if (info.file.status === 'done') {this.$message.success('上传成功!');}if (info.file.status === 'error') {this.$message.error('上传失败!');}},handleCancel() {this.previewVisible = false;},}}</script>
