qiniu.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. (function () {
  2. // 请参考demo的index.js中的initQiniu()方法,若在使用处对options进行了赋值,则此处config不需要赋默认值。init(options) 即updateConfigWithOptions(options),会对config进行赋值
  3. var config = {
  4. // bucket 所在区域。ECN, SCN, NCN, NA, ASG,分别对应七牛云的:华东,华南,华北,北美,新加坡 5 个区域
  5. qiniuRegion: '',
  6. // 七牛云bucket 外链前缀,外链在下载资源时用到
  7. qiniuBucketURLPrefix: '',
  8. // 获取uptoken方法三选一即可,执行优先级为:uptoken
  9. qiniuUploadToken: '',
  10. qiniuShouldUseQiniuFileName: false
  11. }
  12. // init(options) 将七牛云相关配置初始化进本sdk
  13. // 在整个程序生命周期中,只需要 init(options); 一次即可
  14. // 如果需要变更七牛云配置,再次调用 init(options); 即可
  15. function init(options) {
  16. updateConfigWithOptions(options);
  17. }
  18. // 更新七牛云配置
  19. function updateConfigWithOptions(options) {
  20. if (options.region) {
  21. config.qiniuRegion = options.region;
  22. } else {
  23. console.error('qiniu uploader need your bucket region');
  24. }
  25. if (options.uptoken) {
  26. config.qiniuUploadToken = options.uptoken;
  27. }
  28. if (options.domain) {
  29. config.qiniuBucketURLPrefix = options.domain;
  30. }
  31. if(options.shouldUseQiniuFileName){
  32. config.qiniuShouldUseQiniuFileName = options.shouldUseQiniuFileName
  33. }
  34. }
  35. // 正式上传的前置方法,做预处理,应用七牛云配置
  36. function upload(filePath, success, fail, options, progress, cancelTask) {
  37. if (null == filePath) {
  38. console.error('qiniu uploader need filePath to upload');
  39. return;
  40. }
  41. if (options) {
  42. updateConfigWithOptions(options);
  43. }
  44. if (config.qiniuUploadToken) {
  45. doUpload(filePath, success, fail, options, progress, cancelTask);
  46. } else {
  47. console.error('qiniu uploader need one of [uptoken, uptokenURL, uptokenFunc]');
  48. return;
  49. }
  50. }
  51. // 正式上传
  52. function doUpload(filePath, success, fail, options, progress, cancelTask) {
  53. if (null == config.qiniuUploadToken && config.qiniuUploadToken.length > 0) {
  54. console.error('qiniu UploadToken is null, please check the init config or networking');
  55. return
  56. }
  57. var url = uploadURLFromRegionCode(config.qiniuRegion);
  58. var fileName = filePath.split('//')[1];
  59. if (options && options.key) {
  60. fileName = options.key;
  61. }
  62. var formData = {
  63. 'token': config.qiniuUploadToken
  64. };
  65. if (!config.qiniuShouldUseQiniuFileName) {
  66. formData['key'] = fileName
  67. }
  68. var uploadTask = uni.uploadFile({
  69. url: url,
  70. filePath: filePath,
  71. name: 'file',
  72. formData: formData,
  73. success: function (res) {
  74. var dataString = res.data
  75. try {
  76. var dataObject = JSON.parse(dataString);
  77. // 拼接fileURL
  78. var fileURL = config.qiniuBucketURLPrefix + dataObject.key;
  79. dataObject.fileURL = fileURL;
  80. dataObject.imageURL = fileURL;
  81. if (success) {
  82. success(dataObject);
  83. }
  84. } catch (e) {
  85. if (fail) {
  86. fail(e);
  87. }
  88. }
  89. },
  90. fail: function (error) {
  91. if (fail) {
  92. fail(error);
  93. }
  94. }
  95. })
  96. // 文件上传进度
  97. uploadTask.onProgressUpdate((res) => {
  98. progress && progress(res)
  99. })
  100. // 中断文件上传
  101. cancelTask && cancelTask(() => {
  102. uploadTask.abort()
  103. })
  104. }
  105. // 选择七牛云文件上传接口,文件向匹配的接口中传输。ECN, SCN, NCN, NA, ASG,分别对应七牛云的:华东,华南,华北,北美,新加坡 5 个区域
  106. function uploadURLFromRegionCode(code) {
  107. var uploadURL = null;
  108. switch (code) {
  109. case 'ECN': uploadURL = 'https://up.qiniup.com'; break;
  110. case 'NCN': uploadURL = 'https://up-z1.qiniup.com'; break;
  111. case 'SCN': uploadURL = 'https://up-z2.qiniup.com'; break;
  112. case 'NA': uploadURL = 'https://up-na0.qiniup.com'; break;
  113. case 'ASG': uploadURL = 'https://up-as0.qiniup.com'; break;
  114. default: console.error('please make the region is with one of [ECN, SCN, NCN, NA, ASG]');
  115. }
  116. return uploadURL;
  117. }
  118. module.exports = {
  119. init: init,
  120. upload: upload,
  121. }
  122. })();