阿里云文件上传封装
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 ;
}
}