const qiniu = require('qiniu') const path = require('path') const sys = require('../config/sys') const sceneDir = path.join(__dirname, '../', sys.static_dir, sys.scene_dir) const key = 'dlPPwgZky_F-iP8CbSbJpiAtAcqw3BYwb9rdHMrS' const secre = 'YEtkLKDsImXB-8m1CT1zV_YwCwwGvrUvo2ktj9KZ' const host = 'super.4dage.com/' let getToken = (() => { const bucket = 'super' const expires = 7200 let mac = new qiniu.auth.digest.Mac(key, secre); let defaultToken (function referToken() { let putPolicy = new qiniu.rs.PutPolicy({ expires, scope: bucket }) defaultToken = putPolicy.uploadToken(mac); setTimeout(referToken, (expires - 200) * 1000) })(); function getToken (name) { if (!name) return defaultToken; let scope = name ? bucket + ':' + name : bucket; console.log('----', scope) let putPolicy = new qiniu.rs.PutPolicy({ expires, scope }) return putPolicy.uploadToken(mac); } return getToken })(); let zoons = { '华东': 'Zone_z0', '华北': 'Zone_z1', '华南': 'Zone_z2', '北美': 'Zone_na0' } function uploadFile(localFile, target, zone = '华南') { target = path.join(target).replace(/\\/ig, "\/") let config = new qiniu.conf.Config(); let token = getToken(target) let formUploader = new qiniu.form_up.FormUploader() let putExtra = new qiniu.form_up.PutExtra(); config.zone = qiniu.zone[zoons[zone]]; config.useHttpsDomain = true; config.useCdnDomain = true; return new Promise((resolve, reject) => { formUploader.putFile(token, target, localFile, putExtra, err => { if (err) { reject(err) } else { resolve(host + target) } }) }) } const fs = require('fs') const logfile = path.join(__dirname, '../upload.log') module.exports = async (name, file) => { let upload = 0 async function repeatUpload () { try { return await uploadFile( path.join(sceneDir, name, file), 'data/' + path.join(name, file) ) } catch (e) { if (++upload < 5) { return repeatUpload() } else { fs.writeFileSync(logfile, fs.readFileSync(logfile) + '\r\n' + path.join(sceneDir, name, file) + '文件上传失败,失败原因:' + e.toString()) return e } } } return await repeatUpload() }