upqiniu.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. const qiniu = require('qiniu')
  2. const path = require('path')
  3. const sys = require('../config/sys')
  4. const sceneDir = path.join(__dirname, '../', sys.static_dir, sys.scene_dir)
  5. const key = 'dlPPwgZky_F-iP8CbSbJpiAtAcqw3BYwb9rdHMrS'
  6. const secre = 'YEtkLKDsImXB-8m1CT1zV_YwCwwGvrUvo2ktj9KZ'
  7. const host = 'super.4dage.com/'
  8. let getToken = (() => {
  9. const bucket = 'super'
  10. const expires = 7200
  11. let mac = new qiniu.auth.digest.Mac(key, secre);
  12. let defaultToken
  13. (function referToken() {
  14. let putPolicy = new qiniu.rs.PutPolicy({ expires, scope: bucket })
  15. defaultToken = putPolicy.uploadToken(mac);
  16. setTimeout(referToken, (expires - 200) * 1000)
  17. })();
  18. function getToken (name) {
  19. if (!name) return defaultToken;
  20. let scope = name ? bucket + ':' + name : bucket;
  21. console.log('----', scope)
  22. let putPolicy = new qiniu.rs.PutPolicy({ expires, scope })
  23. return putPolicy.uploadToken(mac);
  24. }
  25. return getToken
  26. })();
  27. let zoons = {
  28. '华东': 'Zone_z0',
  29. '华北': 'Zone_z1',
  30. '华南': 'Zone_z2',
  31. '北美': 'Zone_na0'
  32. }
  33. function uploadFile(localFile, target, zone = '华南') {
  34. target = path.join(target).replace(/\\/ig, "\/")
  35. let config = new qiniu.conf.Config();
  36. let token = getToken(target)
  37. let formUploader = new qiniu.form_up.FormUploader()
  38. let putExtra = new qiniu.form_up.PutExtra();
  39. config.zone = qiniu.zone[zoons[zone]];
  40. config.useHttpsDomain = true;
  41. config.useCdnDomain = true;
  42. return new Promise((resolve, reject) => {
  43. formUploader.putFile(token, target, localFile, putExtra, err => {
  44. if (err) {
  45. reject(err)
  46. } else {
  47. resolve(host + target)
  48. }
  49. })
  50. })
  51. }
  52. const fs = require('fs')
  53. const logfile = path.join(__dirname, '../upload.log')
  54. module.exports = async (name, file) => {
  55. let upload = 0
  56. async function repeatUpload () {
  57. try {
  58. return await uploadFile(
  59. path.join(sceneDir, name, file),
  60. 'data/' + path.join(name, file)
  61. )
  62. } catch (e) {
  63. if (++upload < 5) {
  64. return repeatUpload()
  65. } else {
  66. fs.writeFileSync(logfile, fs.readFileSync(logfile) + '\r\n' + path.join(sceneDir, name, file) + '文件上传失败,失败原因:' + e.toString())
  67. return e
  68. }
  69. }
  70. }
  71. return await repeatUpload()
  72. }