aliyun-oss-upload
Version:
用于阿里云OSS采用服务端签名后WEB直传
46 lines (41 loc) • 1.5 kB
JavaScript
/**
* Created by aweiu on 16/11/4.
*/
;
var uuid = require('uuid');
var Cache = require('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 _this = this;
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(function (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(function (rs) {
return {
path: '/' + options.dir + '/' + fileName,
data: rs
};
});
return cacheKey ? promiseCache[cacheKey] = promise : promise;
}
};
module.exports = Upload;