aliyun-oss-upload
Version:
用于阿里云OSS采用服务端签名后WEB直传
43 lines (42 loc) • 1.46 kB
JavaScript
/**
* Created by aweiu on 16/11/4.
*/
import uuid from 'uuid'
import Cache from 'cache-promise'
var promiseCache = {}
function getRandomName (fileName) {
var pos = fileName.lastIndexOf('.')
var suffix = pos === -1 ? '' : fileName.substring(pos)
return uuid.v4().replace(/-/g, '') + suffix
}
function Upload (options) {
this.options = options
this.signature = new Cache(options.signatureGetter, options.expiration)
}
Upload.prototype.post = function (file, cacheKey) {
var cache = promiseCache[cacheKey]
if (cache) return cache
else {
var options = this.options
var fileName = options.randomName ? getRandomName(file.name) : file.name
var promise = this.signature.get()
.then(rs => {
var formData = new window.FormData()
formData.append('signature', rs.signature)
formData.append('OSSAccessKeyId', rs.accessId)
formData.append('policy', rs.policy)
formData.append('key', options.dir + '/' + fileName)
formData.append('file', file)
if (options.hasOwnProperty('successActionStatus')) formData.append('success_action_status', options.successActionStatus)
return this.options.uploader(formData)
})
.then(rs => {
return {
path: '/' + options.dir + '/' + fileName,
data: rs
}
})
return cacheKey ? (promiseCache[cacheKey] = promise) : promise
}
}
export default Upload