UNPKG

1.73 kBJavaScriptView Raw
1const crypto=require('crypto'),path=require('path'),qiniu=require('qiniu'),readChunk=require('read-chunk'),{logger}=require('../utils/logger'),api=require('../api'),{getUserInfo,logout}=require('../login'),constants=require('../constants'),{CDN_DOMAIN}=constants,formUploader=new qiniu.form_up.FormUploader(getQiniuConfig());async function upload(a,b,c={hasHash:!0}){b&&0!==b.length||(logger.error('\u65E0\u53EF\u4E0A\u4F20\u6587\u4EF6'),process.exit(0));let d;try{const a=await getUserInfo({once:!0});d=await getToken(a)}catch(a){return await logout(),Promise.reject(a)}let e=[];return'string'==typeof b||b instanceof Array?('string'==typeof b?e.push(b):e=b,Promise.all(e.map((b)=>new Promise((e,f)=>{const g=b.split(path.sep).pop(),h=g.split('.'),i=h.pop(),j=h.join('.'),k=a?`${CDN_DOMAIN}/${a}`:`${CDN_DOMAIN}`;let l='';if(c.hasHash){const a=readChunk.sync(b,0,10240),c=crypto.createHash('md5').update(a.toString()).digest('hex');l=`${k}/${j}.${c}.${i}`}else l=`${k}/${j}.${i}`;const m=new qiniu.form_up.PutExtra;formUploader.putFile(d,l,b,m,(a,c,d)=>{if(a&&f(a),200==+d.statusCode){const a=c.data.attachment_full_url;e({file:b,url:a.replace('http:','https:')})}else'file exists'===d.data.error&&e({message:'file exists',file:b,url:k}),f({data:d.data,file:b})})})))):Promise.reject('\u4E0A\u4F20\u6587\u4EF6\u53C2\u6570\u7C7B\u578B\u9519\u8BEF: expect "string" or "Array"')}async function getToken(a){const b=await api.getToken(a);if((0==+b.status||200==+b.status)&&b.data&&b.data.uploadToken)return b.data.uploadToken;throw new Error(b.data.msg||b.msg||'\u83B7\u53D6token\u5931\u8D25')}function getQiniuConfig(){return new qiniu.conf.Config({zone:qiniu.zone.Zone_z0,useHttpsDomain:!0,useCdnDomain:!0})}module.exports=upload;
\No newline at end of file