阿里云文件上传封装
import OSS from 'ali-oss'
import md5 from 'js-md5'
import {Toast} from 'vant';
const clientOss = new OSS({
region: 'oss-cn-beijing',
endpoint: 'https://xxxx.xxxxxxxxxxxxxx.com',
cname: true,
accessKeyId: 'xxxxxxxxxxxx',
accessKeySecret: 'xxxxxxxxxxxxx',
bucket: 'xxxxxxxxxxxxxx',
secure:true
})
export function upload(params, data, callback) {
const file_type = params.file.type.split('/')[0]
const file_format = params.file.type.split('/')[1]
const acceptImage = ['jpg', 'jpeg', 'png', 'gif']
const acceptVideo = ['mp4']
const acceptAudio = ['mp3']
if (data.type !== file_type) {
Toast('请上传正确的文件类型!')
callback({ status: 'error' })
return false
}
if (file_type === 'image') {
const isAccept = acceptImage.includes(file_format.toLowerCase(), 0)
if (!isAccept) {
Toast('文件格式只支持PNG,JPG,GIF,请重新上传!')
callback({ status: 'error' })
return false
}
} else if (file_type === 'video') {
const isAccept = acceptVideo.includes(file_format.toLowerCase(), 0)
} else if (file_type === 'audio') {
const isAccept = acceptAudio.includes(file_format.toLowerCase(), 0)
if (!isAccept) {
Toast('文件格式只支持MP3,请重新上传!')
callback({ status: 'error' })
return false
}
}
if (file_type === 'image') {
const file_size = params.file.size / (1 * 1024 * 1024).toFixed(1)
if (file_size >= 5) {
Toast('文件大小超出5M,请重新上传!')
callback({ status: 'error' })
return false
} else {
const file_name = md5(params.file.name.split('.')[0] + new Date().getTime()) + '.' + file_format
clientOss.put('images/' + file_name, params.file).then(res => {
callback(res.url)
}).catch((err) => {
console.log('error:', err)
return false
})
}
} else if (file_type === 'video') {
const url = URL.createObjectURL(params.file)
const audioElement = new Audio(url)
audioElement.addEventListener('loadedmetadata', () => {
const file_time = Math.floor(audioElement.duration)
if (file_time > data.len) {
Toast('视频时长不可超过' + data.len + '秒,请重新上传!')
callback({ status: 'error' })
return false
} else {
const file_name = md5(params.file.name.split('.')[0] + new Date().getTime()) + new Date().getTime() + '.' + file_format
clientOss.put('images/' + file_name, params.file).then(res => {
callback(res.url)
}).catch((err) => {
console.log('error:', err)
return false
})
}
})
} else if (file_type === 'audio') {
const url = URL.createObjectURL(params.file)
const audioElement = new Audio(url)
audioElement.addEventListener('loadedmetadata', () => {
const file_time = Math.floor(audioElement.duration)
if (file_time > data.len) {
Toast('音频时长不可超过' + data.len + '秒,请重新上传!')
callback({ status: 'error' })
return false
} else {
var name = "";
if (params.file.name) {
name = params.file.name
} else {
var date=new Date()
name =date.getFullYear()+"_"+ new Date().getTime()
}
const file_name = md5(name.split('.')[0] + new Date().getTime()) + new Date().getTime() + '.' + file_format
clientOss.put('images/' + file_name, params.file).then(res => {
const param = {url: res.url, seconds: file_time}
callback(param)
}).catch((err) => {
console.log('error:', err)
return false
})
}
})
}
}
export function imgOverSize(params, data, callback) {
const file_size = params.file.size / (1 * 1024 * 1024).toFixed(1)
if (file_size >= 5) {
Toast('文件大小超出5M,请重新上传!')
return true
}else{
return false;
}
}