function policy() { return new Promise((resolve, reject) => { $.ajax({ url: '/oss', type: 'GET', contentType: 'application/json; charset=UTF-8', success: function (res) { if (res.code == 20000) { resolve(res) } else { reject(res) } }, error: function (res) { reject(res) } }); }); }
function getUUID() { return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => { return (c === 'x' ? (Math.random() * 16 | 0) : ('r&0x3' | '0x8')).toString(16) }) }
function wangEditorCustomUploadImg(resultFiles, insertImgFn) { policy().then(response => { if (response.code != 20000) { console.error(response) return } console.log(response) let key = response.data.dir + getUUID() + "_${filename}"; let url = response.data.host + "/" + key.replace("${filename}", resultFiles[0].name) let formData = new FormData(); formData.append('key', key); formData.append('ossaccessKeyId', response.data.accessid); formData.append('policy', response.data.policy); formData.append('signature', response.data.signature); formData.append("dir", response.data.dir); formData.append("host", response.data.host); formData.append("file", resultFiles[0]); console.log(url) $.ajax({ url: response.data.host, type: 'POST', contentType: false, processData: false, data: formData, success: function (res) { insertImgFn(url) }, error: function (res) { console.error(res) } }) }).catch(err => { console.error(err) }); }
Vue.component('singleUpload', { props: ['value'], template: ' <div class="single-upload">' + ' <el-upload' + ' :before-upload="beforeUpload"' + ' :data="dataObj"' + ' :file-list="fileList"' + ' :multiple="false"' + ' :on-preview="handlePreview"' + ' :on-remove="handleRemove"' + ' :on-success="handleUploadSuccess"' + ' :show-file-list="showFileList"' + ' :action="dataObj.host"' + ' list-type="text"' + ' style="display: flex;"' + ' >' + ' <el-button size="small" type="primary">点击上传</el-button>' + ' </el-upload>' + ' <el-dialog :modal="false" :visible.sync="dialogVisible">' + ' <img width="100%;" v-if="isImg(fileList[0].url)" :src="fileList[0].url" alt="图片找不到了..."/>' + ' <video width="900px" controls autoplay muted v-if="isVideo(fileList[0].url)" :src="fileList[0].url" alt="视频找不到了..."/>' + ' </el-dialog>' + ' </div>', data() { return { dataObj: { policy: "", signature: "", key: "", ossaccessKeyId: "", dir: "", host: "" }, dialogVisible: false }; }, computed: { imageUrl() { return this.value; }, imageName() { if (this.value != null && this.value !== "") { return this.value.substr(this.value.lastIndexOf("/") + 1); } else { return null; } }, fileList() { return [ { name: this.imageName, url: this.imageUrl } ]; }, showFileList: { get: function () { return ( this.value !== null && this.value !== "" && this.value !== undefined ); }, set: function (newValue) { } } }, methods: { isVideo() { let fileType = this.getFileType() return ~['.mp4', '.avi'].indexOf(fileType) }, isImg() { let fileType = this.getFileType() return ~['.png', '.jpg', '.jpeg', '.gif'].indexOf(fileType) }, getFileType() { let fileType = this.value.substring(this.value.lastIndexOf('.')) return fileType }, getUUID() { return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => { return (c === 'x' ? (Math.random() * 16 | 0) : ('r&0x3' | '0x8')).toString(16) }) }, emitInput(val) { this.$emit("input", val); }, handleRemove(file, fileList) { this.emitInput(""); }, handlePreview(file) { this.dialogVisible = true; }, beforeUpload(file) { let _self = this; return new Promise((resolve, reject) => { policy() .then(response => { console.log(response) _self.dataObj.policy = response.data.policy; _self.dataObj.signature = response.data.signature; _self.dataObj.ossaccessKeyId = response.data.accessid; _self.dataObj.key = response.data.dir + this.getUUID() + "_${filename}"; _self.dataObj.dir = response.data.dir; _self.dataObj.host = response.data.host; resolve(true); }) .catch(err => { reject(false); }); }); }, handleUploadSuccess(res, file) { console.log("上传成功..."); this.showFileList = true; this.fileList.pop(); this.fileList.push({ name: file.name, url: this.dataObj.host + "/" + this.dataObj.key.replace("${filename}", file.name) }); this.emitInput(this.fileList[0].url); console.log(this.fileList[0]); } } })
|