123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- // fileUpload.js
- import { v4 as uuidv4 } from 'uuid'
- import axios from 'axios'
- import { getOssConfig } from '@/api/common'
- import { getToken } from '@/utils/auth'
- /**
- * @description: 文件附件上传
- * file: 文件raw对象
- * successCallback: 成功的回调函数
- * errCallBack: 错误的回调函数
- * progressCallback: 上传进度的回调函数
- * dir: 上传阿里云目标文件夹 eg:图片image,视频video等
- */
- const upload = async function (
- file,
- successCallback = new Function(),
- errCallBack = new Function(),
- progressCallback = new Function(),
- dir = 'image'
- ) {
- let fileName = file.name
- // 拿到签名信息后,组装表单数据,作参考,具体的字段找后台要
- let obj = ((await getOssConfig()) || {}).data
- let config = {}
- config.host = obj['host']
- config.OSSAccessKeyId = obj['OSSAccessKeyId']
- config.policyBase64 = obj['policy']
- config.signature = obj['signature']
- config.expire = parseInt(obj['expire'])
- config.dir = obj['dir']
- let fd = new FormData(),
- uuid = uuidv4(),
- key = `${config.dir}${uuid}${fileName}`
- fd.append('key', key)
- fd.append('success_action_status', '200')
- fd.append('OSSAccessKeyId', config.OSSAccessKeyId)
- fd.append('policy', config.policyBase64)
- fd.append('signature', config.signature)
- fd.append('success_action_status', '200')
- fd.append('file', file)
- console.log(config)
- if (config.host.indexOf('http:') > -1) {
- var protocol = window.location.protocol || 'http:'
- var subUrl = config.host.substring(5, config.host.length)
- config.host = protocol + subUrl
- }
- // 数据组装完成后,发送上传请求到阿里云oss
- axios({
- url: config.host,
- method: 'POST',
- data: fd,
- processData: false,
- cache: false,
- contentType: false,
- headers: {
- 'x-token': getToken() // 请求头
- },
- // 这里,我们可以做上传经度
- onUploadProgress: function (progressEvent) {
- if (progressEvent.lengthComputable) {
- let percent = (progressEvent.loaded / progressEvent.total) * 100 || 0
- progressCallback({
- percent: percent
- })
- }
- }
- })
- .then(() => {
- // 拿到结果后,做其他操作
- let size =
- file.size > 1000000
- ? parseFloat(file.size / 1000000).toFixed(2) + 'M'
- : parseFloat(file.size / 1000).toFixed(2) + 'KB'
- successCallback({
- attachment: fileName,
- aliyunAddress: key,
- size: size,
- host: config.host
- })
- })
- .catch(err => {
- errCallBack(err)
- })
- }
- export default upload
|