oss-upload-browser
Version:
oss-browser文件上传
72 lines (68 loc) • 2.17 kB
JavaScript
import { fileMd5 } from "./file-md5";
const OSS = require('ali-oss');
let ossClient;
//小文件上传
const put_upload = (_ossConfig, _resolve) => {
ossClient.put(`${_ossConfig.folder}/${_ossConfig.filename}`, _ossConfig.fileObj)
.then(uploadResponse => {
if (uploadResponse.res.status === 200) {
_resolve({
status: 200,
data: uploadResponse.url.replace(/http:/, "https:")
});
} else {
_resolve({status: 400, data: ''});
};
})
}
// 大文件分片上传
const multipart_upload = (_ossConfig, _resolve) => {
ossClient.multipartUpload(`${_ossConfig.folder}/${_ossConfig.filename}`, _ossConfig.fileObj, {
progress: p => {
_resolve({ status: 300, data: p * 100 });
},
partSize: 5 * 1024 * 1024
}).then(uploadResponse => {
if (uploadResponse.res.status === 200) {
_resolve({
status: 200,
data: `${_ossConfig.bucket}${uploadResponse.name}`
});
} else {
_resolve({status: 400, data: ''});
}
});
}
// 传入oss配置、oss bucket、oss目标文件夹、File对象
const ossUpload = inputObj => {
return new Promise(resolve => {
let ossConfig = {
bucket: `https://${inputObj.license.bucket}.${inputObj.license.region}.aliyuncs.com`,
folder: inputObj.folder,
fileObj: inputObj.fileObj
};
try {
ossClient = new OSS(inputObj.license);
}
catch(err) {
console.error("Error: oss init file,please check your oss config");
}
// 将文件的MD5值设为文件名
fileMd5(inputObj.fileObj, (err, md5Result) => {
try {
if (err) throw err;
ossConfig['filename'] = `${md5Result}.${inputObj.hasOwnProperty('extension') && inputObj.extension ?
inputObj.extension :
inputObj.fileObj.type.slice(inputObj.fileObj.type.search(/\//) + 1)}`;
// 根据文件大小选择上传方式
inputObj.fileObj.size < 20 * 1024 * 1024 ?
put_upload(ossConfig, resolve) :
multipart_upload(ossConfig, resolve);
}
catch(err) {
console.error(err);
}
});
});
}
export default ossUpload;