@sadais/uploader 0.5.1 → 0.5.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.es.js +109 -40
- package/dist/index.min.js +1 -1
- package/package.json +1 -1
package/dist/index.es.js
CHANGED
|
@@ -1,18 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 重试函数
|
|
3
|
+
* @param {*} asyncFn 需要重试的异步函数
|
|
4
|
+
* @param {*} parseResultFn 解析结果的函数
|
|
5
|
+
* @param {*} initialRetryCount 初始重试次数
|
|
6
|
+
* @param {*} initialDelayTime 重试间隔时间
|
|
7
|
+
* @returns new Promise 重试函数
|
|
8
|
+
*/
|
|
9
|
+
function useFnRetry(
|
|
10
|
+
asyncFn,
|
|
11
|
+
parseResultFn = (r) => r,
|
|
12
|
+
initialRetryCount = 10,
|
|
13
|
+
initialDelayTime = 1000,
|
|
14
|
+
logPerfix = ''
|
|
15
|
+
) {
|
|
16
|
+
let retryCount = initialRetryCount;
|
|
17
|
+
|
|
18
|
+
return new Promise((resolve, reject) => {
|
|
19
|
+
const executeWithRetry = async () => {
|
|
20
|
+
try {
|
|
21
|
+
const result = await asyncFn();
|
|
22
|
+
const parsedResult = await parseResultFn(result);
|
|
23
|
+
if (!parsedResult && retryCount > 0) {
|
|
24
|
+
retryCount--; // 减少重试次数
|
|
25
|
+
console.log(logPerfix, '重试次数减少,剩余次数:', retryCount);
|
|
26
|
+
setTimeout(executeWithRetry, initialDelayTime);
|
|
27
|
+
} else {
|
|
28
|
+
console.log(logPerfix, '返回结果:', result);
|
|
29
|
+
resolve(result);
|
|
30
|
+
}
|
|
31
|
+
} catch (error) {
|
|
32
|
+
if (retryCount > 0) {
|
|
33
|
+
retryCount--; // 减少重试次数
|
|
34
|
+
console.log(logPerfix, '异常重试次数减少,剩余次数:', retryCount);
|
|
35
|
+
setTimeout(executeWithRetry, initialDelayTime);
|
|
36
|
+
} else {
|
|
37
|
+
console.log(logPerfix, '重试次数已用完,错误信息:', error);
|
|
38
|
+
reject(error);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
executeWithRetry();
|
|
43
|
+
})
|
|
44
|
+
}
|
|
45
|
+
|
|
1
46
|
/*
|
|
2
47
|
* @Author: fuwenlong
|
|
3
48
|
* @Date: 2022-01-14 14:22:39
|
|
4
|
-
* @LastEditTime: 2024-07-
|
|
49
|
+
* @LastEditTime: 2024-07-22 10:28:01
|
|
5
50
|
* @LastEditors: zhangzhenfei
|
|
6
51
|
* @Description: 文件上传
|
|
7
52
|
*/
|
|
8
|
-
// 初始化 oss 重试机制
|
|
9
|
-
let MaxOssRetry = 5;
|
|
10
|
-
let initOssRetry = 0;
|
|
11
53
|
|
|
12
54
|
function isFile(obj) {
|
|
13
55
|
return obj && obj.size
|
|
14
56
|
}
|
|
15
57
|
|
|
58
|
+
function fileToBuf(file) {
|
|
59
|
+
return new Promise((resolve, reject) => {
|
|
60
|
+
var fr = new FileReader();
|
|
61
|
+
file.name;
|
|
62
|
+
|
|
63
|
+
fr.readAsArrayBuffer(file);
|
|
64
|
+
fr.addEventListener(
|
|
65
|
+
'loadend',
|
|
66
|
+
(e) => {
|
|
67
|
+
var buf = e.target.result;
|
|
68
|
+
resolve(buf);
|
|
69
|
+
},
|
|
70
|
+
false
|
|
71
|
+
);
|
|
72
|
+
})
|
|
73
|
+
}
|
|
74
|
+
|
|
16
75
|
// 对象存储类型
|
|
17
76
|
const UPLOADER_TYPE = {
|
|
18
77
|
ALIYUN: 'ALIYUN', // 阿里云
|
|
@@ -57,8 +116,6 @@ class SadaisUploader {
|
|
|
57
116
|
*/
|
|
58
117
|
async _init(params) {
|
|
59
118
|
this.params = params;
|
|
60
|
-
// 不在初始化的时候调用接口,上传文件时再调用,故注释以下代码
|
|
61
|
-
// this._initOptions()
|
|
62
119
|
}
|
|
63
120
|
|
|
64
121
|
/**
|
|
@@ -76,9 +133,8 @@ class SadaisUploader {
|
|
|
76
133
|
let { type, getOptionFun, path, getAuthInfoFunc, isUploadWebp, ossFailedApiOption } =
|
|
77
134
|
this.params;
|
|
78
135
|
this.getAuthInfoFunc = getAuthInfoFunc;
|
|
79
|
-
this.options = {
|
|
136
|
+
this.options = { ...this.params };
|
|
80
137
|
if (getOptionFun) {
|
|
81
|
-
initOssRetry = 0;
|
|
82
138
|
const options = await this._initOptionFun();
|
|
83
139
|
if (!options) return
|
|
84
140
|
path = path || options.path;
|
|
@@ -90,23 +146,13 @@ class SadaisUploader {
|
|
|
90
146
|
}
|
|
91
147
|
|
|
92
148
|
async _initOptionFun() {
|
|
93
|
-
return
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
}
|
|
101
|
-
console.log('初始化oss重试', initOssRetry);
|
|
102
|
-
initOssRetry++;
|
|
103
|
-
const options = await this.params.getOptionFun(this.params.type);
|
|
104
|
-
if (options?.endPoint) {
|
|
105
|
-
clearInterval(intervalId);
|
|
106
|
-
resolve(options);
|
|
107
|
-
}
|
|
108
|
-
}, 1000);
|
|
109
|
-
})
|
|
149
|
+
return useFnRetry(
|
|
150
|
+
() => this.params.getOptionFun(this.params.type),
|
|
151
|
+
(result) => result?.endPoint,
|
|
152
|
+
5,
|
|
153
|
+
300,
|
|
154
|
+
'oss 初始化'
|
|
155
|
+
)
|
|
110
156
|
}
|
|
111
157
|
|
|
112
158
|
/**
|
|
@@ -149,7 +195,7 @@ class SadaisUploader {
|
|
|
149
195
|
await this.initOptions();
|
|
150
196
|
}
|
|
151
197
|
|
|
152
|
-
console.log('sadais uploader
|
|
198
|
+
console.log('sadais uploader 上传文件内容', file);
|
|
153
199
|
|
|
154
200
|
// 兼容uniapp的file对象
|
|
155
201
|
file = !isFile(file) && isFile(file.path) ? file.path : file;
|
|
@@ -159,6 +205,8 @@ class SadaisUploader {
|
|
|
159
205
|
...opts
|
|
160
206
|
};
|
|
161
207
|
|
|
208
|
+
console.log('当前上传配置信息', this.options);
|
|
209
|
+
|
|
162
210
|
if (!file.name && file.path) {
|
|
163
211
|
// 处理没有name的file文件
|
|
164
212
|
const isBlobFile = file.path.startsWith('blob');
|
|
@@ -194,7 +242,7 @@ class SadaisUploader {
|
|
|
194
242
|
async uploadFiles(files, opts = {}) {
|
|
195
243
|
const successUrls = [];
|
|
196
244
|
const failUrls = [];
|
|
197
|
-
for (const file of files) {
|
|
245
|
+
for await (const file of files) {
|
|
198
246
|
const { data, head } = await this.uploadFile(file, opts);
|
|
199
247
|
if (head.ret === 0) {
|
|
200
248
|
successUrls.push(data);
|
|
@@ -231,7 +279,7 @@ class SadaisUploader {
|
|
|
231
279
|
filePath: file.path, // uni api提供的blob格式图片地址
|
|
232
280
|
name: 'file',
|
|
233
281
|
formData,
|
|
234
|
-
timeout: this.options.uploadTimeOut ||
|
|
282
|
+
timeout: this.options.uploadTimeOut || 10000, // 默认10s
|
|
235
283
|
success: (res) => {
|
|
236
284
|
const { statusCode } = res;
|
|
237
285
|
if (statusCode == 200) {
|
|
@@ -255,7 +303,7 @@ class SadaisUploader {
|
|
|
255
303
|
});
|
|
256
304
|
data.append('file', file);
|
|
257
305
|
const xhr = new XMLHttpRequest();
|
|
258
|
-
xhr.timeout = this.options.uploadTimeOut ||
|
|
306
|
+
xhr.timeout = this.options.uploadTimeOut || 10000; // 默认10s
|
|
259
307
|
xhr.open('POST', apiUrl, true);
|
|
260
308
|
xhr.onreadystatechange = () => {
|
|
261
309
|
if (xhr.readyState === XMLHttpRequest.DONE) {
|
|
@@ -272,7 +320,29 @@ class SadaisUploader {
|
|
|
272
320
|
|
|
273
321
|
async _apiSubmit(resolve, reject, file) {
|
|
274
322
|
console.log('api接口上传');
|
|
275
|
-
|
|
323
|
+
|
|
324
|
+
const { ossFailedApiOption, uploadTimeOut } = this.options;
|
|
325
|
+
|
|
326
|
+
function _apiSubmitRetry() {
|
|
327
|
+
return useFnRetry(
|
|
328
|
+
() => {
|
|
329
|
+
return uni.uploadFile({
|
|
330
|
+
url: ossFailedApiOption.api,
|
|
331
|
+
filePath: file.path,
|
|
332
|
+
name: 'file',
|
|
333
|
+
timeout: uploadTimeOut || 10000 // 默认10s
|
|
334
|
+
})
|
|
335
|
+
},
|
|
336
|
+
(r) => {
|
|
337
|
+
const [, result] = r;
|
|
338
|
+
const { errMsg, data: resData } = result || {};
|
|
339
|
+
return errMsg === 'uploadFile:ok'
|
|
340
|
+
},
|
|
341
|
+
5,
|
|
342
|
+
500,
|
|
343
|
+
'api接口上传'
|
|
344
|
+
)
|
|
345
|
+
}
|
|
276
346
|
|
|
277
347
|
const success = {
|
|
278
348
|
data: '',
|
|
@@ -284,13 +354,7 @@ class SadaisUploader {
|
|
|
284
354
|
};
|
|
285
355
|
|
|
286
356
|
try {
|
|
287
|
-
const [, result] = await
|
|
288
|
-
url: ossFailedApiOption.api,
|
|
289
|
-
filePath: file.path,
|
|
290
|
-
name: 'file',
|
|
291
|
-
timeout: this.options.uploadTimeOut || 20000 // 默认20s
|
|
292
|
-
});
|
|
293
|
-
console.log('api接口上传结果', result);
|
|
357
|
+
const [, result] = await _apiSubmitRetry();
|
|
294
358
|
|
|
295
359
|
if (typeof result !== 'object') {
|
|
296
360
|
reject(error);
|
|
@@ -367,18 +431,23 @@ class SadaisUploader {
|
|
|
367
431
|
head: { ret: 1, msg: 'fail' }
|
|
368
432
|
};
|
|
369
433
|
|
|
370
|
-
const uploadFunc = (data) => {
|
|
434
|
+
const uploadFunc = async (data) => {
|
|
371
435
|
console.log('上传数据', data);
|
|
372
436
|
try {
|
|
437
|
+
let uploadData = data;
|
|
438
|
+
if (isFile(data)) {
|
|
439
|
+
uploadData = await fileToBuf(file);
|
|
440
|
+
}
|
|
441
|
+
|
|
373
442
|
uni.request({
|
|
374
443
|
url: apiUrl,
|
|
375
444
|
method: 'PUT',
|
|
376
|
-
data,
|
|
445
|
+
data: uploadData,
|
|
377
446
|
header: {
|
|
378
447
|
'Authorization': authorizationInfo,
|
|
379
448
|
'Pic-Operations': picOperations
|
|
380
449
|
},
|
|
381
|
-
timeout: this.options.uploadTimeOut ||
|
|
450
|
+
timeout: this.options.uploadTimeOut || 10000, // 默认10s
|
|
382
451
|
success: (res) => {
|
|
383
452
|
console.log('上传结果', res);
|
|
384
453
|
const { statusCode } = res;
|
package/dist/index.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";function e(t){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e(t)}function t(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,a,o=[],i=!0,s=!1;try{for(n=n.call(e);!(i=(r=n.next()).done)&&(o.push(r.value),!t||o.length!==t);i=!0);}catch(e){s=!0,a=e}finally{try{i||null==n.return||n.return()}finally{if(s)throw a}}return o}(e,t)||r(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function n(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=r(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var a=0,o=function(){};return{s:o,n:function(){return a>=e.length?{done:!0}:{done:!1,value:e[a++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,s=!0,u=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return s=e.done,e},e:function(e){u=!0,i=e},f:function(){try{s||null==n.return||n.return()}finally{if(u)throw i}}}}function r(e,t){if(e){if("string"==typeof e)return a(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?a(e,t):void 0}}function a(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?o(Object(n),!0).forEach((function(t){s(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):o(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function s(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function u(e,t,n,r,a,o,i){try{var s=e[o](i),u=s.value}catch(e){return void n(e)}s.done?t(u):Promise.resolve(u).then(r,a)}function c(e){return function(){var t=this,n=arguments;return new Promise((function(r,a){var o=e.apply(t,n);function i(e){u(o,r,a,i,s,"next",e)}function s(e){u(o,r,a,i,s,"throw",e)}i(void 0)}))}}function p(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}Object.defineProperty(exports,"__esModule",{value:!0});var l=0;function f(e){return e&&e.size}var h,m={ALIYUN:"ALIYUN",TXYUN:"TXYUN",HUAWEI:"HUAWEI"},d=function(e){return h||(h=new y(e)),h},y=function(){function r(e){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,r),this._init(e)}var a,o,s,u,h,d,y,g,b,v,x;return a=r,o=[{key:"_init",value:(x=c(regeneratorRuntime.mark((function e(t){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:this.params=t;case 1:case"end":return e.stop()}}),e,this)}))),function(e){return x.apply(this,arguments)})},{key:"initOptions",value:(v=c(regeneratorRuntime.mark((function e(t){var n,r,a,o,s,u,c,p;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.params||(this.params={}),!t){e.next=3;break}return e.abrupt("return",this.params=i(i({},this.params),t));case 3:if(n=this.params,r=n.type,a=n.getOptionFun,o=n.path,s=n.getAuthInfoFunc,u=n.isUploadWebp,c=n.ossFailedApiOption,this.getAuthInfoFunc=s,this.options={type:r,isUploadWebp:u,ossFailedApiOption:c},!a){e.next=16;break}return l=0,e.next=10,this._initOptionFun();case 10:if(p=e.sent){e.next=13;break}return e.abrupt("return");case 13:(o=o||p.path)&&!o.endsWith("/")&&(p.path=o+"/"),this.options=i(i({},this.options),p);case 16:case"end":return e.stop()}}),e,this)}))),function(e){return v.apply(this,arguments)})},{key:"_initOptionFun",value:(b=c(regeneratorRuntime.mark((function e(){var t=this;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",new Promise((function(e){var n=setInterval(c(regeneratorRuntime.mark((function r(){var a;return regeneratorRuntime.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return l>5&&(console.log("oss初始化失败"),clearInterval(n),l=0,e({})),console.log("初始化oss重试",l),l++,r.next=5,t.params.getOptionFun(t.params.type);case 5:null!=(a=r.sent)&&a.endPoint&&(clearInterval(n),e(a));case 7:case"end":return r.stop()}}),r)}))),1e3)})));case 1:case"end":return e.stop()}}),e)}))),function(){return b.apply(this,arguments)})},{key:"_isTimeOut",value:function(){var e=this.options.timeOut-1e4;return(new Date).getTime()>e}},{key:"upload",value:(g=c(regeneratorRuntime.mark((function e(t){var n,r,a,o,i,s,u;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t){e.next=2;break}return e.abrupt("return");case 2:n=Array.isArray(t)?t:[t],r=[],a=0;case 5:if(!(a<n.length)){e.next=16;break}return o=n[a],e.next=9,this.uploadFile(o);case 9:i=e.sent,s=i.data,u=i.head,r.push({index:a,url:s,ret:u.ret});case 13:a++,e.next=5;break;case 16:return e.abrupt("return",r);case 17:case"end":return e.stop()}}),e,this)}))),function(e){return g.apply(this,arguments)})},{key:"uploadFile",value:(y=c(regeneratorRuntime.mark((function e(t){var n,r,a,o,s,u=this,c=arguments;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=c.length>1&&void 0!==c[1]?c[1]:{},this.options&&null!==(n=this.options)&&void 0!==n&&n.endPoint&&!this._isTimeOut()){e.next=5;break}return console.log("初始化 oss 开始"),e.next=5,this.initOptions();case 5:return console.log("sadais uploader 上传文件",t),t=!f(t)&&f(t.path)?t.path:t,this.options=i(i({},this.options),r),!t.name&&t.path&&(a=t.path.startsWith("blob"),o=t.path.startsWith("data"),s=a||o?".png":t.path.substring(t.path.lastIndexOf(".")),t.name=this._guid()+s),e.abrupt("return",new Promise((function(e,n){u.options.endPoint?u.options.isUploadWebp&&m.TXYUN==u.params.type&&u._fileIsPic(t.name)?u._putSubmit(e,n,t):u._formSubmit(e,n,t):(console.log("oss 初始化失败,走接口上传"),u._apiSubmit(e,n,t))})));case 10:case"end":return e.stop()}}),e,this)}))),function(e){return y.apply(this,arguments)})},{key:"uploadFiles",value:(d=c(regeneratorRuntime.mark((function e(t){var r,a,o,i,s,u,c,p,l=arguments;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r=l.length>1&&void 0!==l[1]?l[1]:{},a=[],o=[],i=n(t),e.prev=4,i.s();case 6:if((s=i.n()).done){e.next=16;break}return u=s.value,e.next=10,this.uploadFile(u,r);case 10:c=e.sent,p=c.data,0===c.head.ret?a.push(p):o.push(p);case 14:e.next=6;break;case 16:e.next=21;break;case 18:e.prev=18,e.t0=e.catch(4),i.e(e.t0);case 21:return e.prev=21,i.f(),e.finish(21);case 24:return e.abrupt("return",{successUrls:a,failUrls:o});case 25:case"end":return e.stop()}}),e,this,[[4,18,21,24]])}))),function(e){return d.apply(this,arguments)})},{key:"_formSubmit",value:function(e,t,n){console.log("表单上传");var r=this.options.domain,a=this._buildParams(n),o=a.url,i={data:"".concat(r).concat(r.endsWith("/")?"":"/").concat(a.key),head:{ret:0,msg:"success"}},s={data:n.name,head:{ret:1,msg:"fail"}};try{uni.uploadFile({url:o,filePath:n.path,name:"file",formData:a,timeout:this.options.uploadTimeOut||2e4,success:function(n){200==n.statusCode?e(i):(s.head.msg=n,t(s))},fail:function(e){console.log(e),t(e)}})}catch(r){console.log("uni报错,调用XMLHttpRequest",r);var u=new FormData;Object.keys(a).forEach((function(e){u.append(e,a[e])})),u.append("file",n);var c=new XMLHttpRequest;c.timeout=this.options.uploadTimeOut||2e4,c.open("POST",o,!0),c.onreadystatechange=function(){c.readyState===XMLHttpRequest.DONE&&(200===c.status?e(i):t(s))},c.send(u)}}},{key:"_apiSubmit",value:(h=c(regeneratorRuntime.mark((function n(r,a,o){var i,s,u,c,p,l,f,h,m,d,y,g,b,v;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return console.log("api接口上传"),i=this.options.ossFailedApiOption,s={data:"",head:{ret:0,msg:"success"}},u={data:o.name,head:{ret:1,msg:"fail"}},n.prev=4,n.next=7,uni.uploadFile({url:i.api,filePath:o.path,name:"file",timeout:this.options.uploadTimeOut||2e4});case 7:c=n.sent,p=t(c,2),l=p[1],console.log("api接口上传结果",l),"object"!==e(l)&&a(u),h=(f=l||{}).errMsg,m=f.data,h&&"uploadFile:ok"===h||(u.head.msg=h,a(u)),d=JSON.parse(m),y=d.data,g=d.head,b=(g=void 0===g?{}:g).ret,v=g.msg,b!==i.successRetCode?(u.head.msg=v,a(u)):(s.data=y.url,r(s)),n.next=23;break;case 20:n.prev=20,n.t0=n.catch(4),a(n.t0);case 23:case"end":return n.stop()}}),n,this,[[4,20]])}))),function(e,t,n){return h.apply(this,arguments)})},{key:"_putSubmit",value:(u=c(regeneratorRuntime.mark((function e(t,n,r){var a,o,i,s,u,c,p,l,f,h,m,d,y,g,b,v,x,k=this;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return console.log("腾讯put上传"),a=this.options,o=a.domain,i=a.ossFailedApiOption,s=this._buildParams(r),u=s.url+"/"+s.key,c=JSON.stringify({is_pic_info:1,rules:[{fileid:"/"+s.key,rule:"imageMogr2/format/webp"}]}),p={httpMethodName:"PUT",resoucePath:"/"+s.key,storage:this.params.type,headerMap:{"Pic-Operations":c}},l={},e.prev=7,console.log("获取权限信息"),e.next=11,this.getAuthInfoFunc(p);case 11:if(l=e.sent,console.log("获取权限结果",l),l.content){e.next=15;break}return e.abrupt("return",this._apiSubmit(t,n,r));case 15:e.next=21;break;case 17:return e.prev=17,e.t0=e.catch(7),console.log("获取权限失败",e.t0),e.abrupt("return",this._apiSubmit(t,n,r));case 21:if(f=l?l.content:""){e.next=24;break}return e.abrupt("return",n(d));case 24:h="".concat(o).concat(o.endsWith("/")?"":"/").concat(s.key),m={data:h,head:{ret:0,msg:"success"}},d={data:r.name,head:{ret:1,msg:"fail"}},y=function(e){console.log("上传数据",e);try{uni.request({url:u,method:"PUT",data:e,header:{Authorization:f,"Pic-Operations":c},timeout:k.options.uploadTimeOut||2e4,success:function(e){console.log("上传结果",e),200==e.statusCode?t(m):i?k._apiSubmit(t,n,r):(d.head.msg=e,n(d))},fail:function(e){console.log("上传失败",i),i?k._apiSubmit(t,n,r):(console.log(e),n(e))}})}catch(r){console.log("web环境");var a=new XMLHttpRequest;a.open("PUT",u,!0),a.setRequestHeader("Authorization",f),a.setRequestHeader("Pic-Operations",c),a.onreadystatechange=function(){a.readyState===XMLHttpRequest.DONE&&(200===a.status?t(m):n(d))},a.send(e)}},e.prev=28,console.log("微信环境"),g=uni.getFileSystemManager(),b=g.readFileSync(r.path),y(b),e.next=48;break;case 35:if(e.prev=35,e.t1=e.catch(28),console.log("H5环境"),!r.type){e.next=42;break}y(r),e.next=48;break;case 42:return e.next=44,fetch(r.path).then((function(e){return e.blob()}));case 44:v=e.sent,(x=new FileReader).onload=function(){y(x.result)},x.readAsArrayBuffer(v);case 48:case"end":return e.stop()}}),e,this,[[7,17],[28,35]])}))),function(e,t,n){return u.apply(this,arguments)})},{key:"_fileIsPic",value:function(e){var t=e.substring(e.lastIndexOf(".")+1);return["png","jpg","jpeg","gif","bmp","webp","avif","heif","tpg","psd"].includes(t.toLowerCase())}},{key:"_buildParams",value:function(e){var t=this.options,n=t.type,r={name:e.name,policy:t.policy,success_action_status:"200",key:this._getUploadFilePath(e.name)},a=t.endPoint.replace("https://","").replace("http://","");return m.TXYUN===n?(r["q-ak"]=t.accessKeyId,r["q-signature"]=t.signature,r["q-sign-algorithm"]="sha1",r["q-key-time"]=t.param["q-sign-time"],r.url="https://".concat(t.bucketName,".cos.").concat(a,".myqcloud.com")):m.HUAWEI===n?(r.AccessKeyId=t.accessKeyId,r.signature=t.signature,r.url="https://".concat(t.bucketName,".obs.").concat(a,".myhuaweicloud.com")):(r.signature=t.signature,r.OSSAccessKeyId=t.accessKeyId,r.bucket=t.bucketName,r.url="https://".concat(t.bucketName,".").concat(a)),r}},{key:"_getUploadFilePath",value:function(e){this.params.type;var t=this.options,n=t.useOriginalName,r=t.path,a=e.lastIndexOf("."),o=e.substring(0,a),i=e.substring(a+1),s=n?"/".concat(o):"";return"".concat(r).concat(this._getNowDate(),"/").concat(this._guid()).concat(s,".").concat(i)}},{key:"_getNowDate",value:function(){var e=new Date,t=e.getFullYear(),n=e.getMonth()+1,r=e.getDate();return n<10&&(n="0".concat(n)),r<10&&(r="0".concat(r)),"".concat(t).concat(n).concat(r)}},{key:"_guid",value:function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){var t=16*Math.random()|0;return("x"==e?t:3&t|8).toString(16)}))}}],o&&p(a.prototype,o),s&&p(a,s),Object.defineProperty(a,"prototype",{writable:!1}),r}();exports.DEFAULT_OPTIONS={},exports.UPLOADER_TYPE=m,exports.UploaderInstance=d;
|
|
1
|
+
"use strict";function e(t){return e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e(t)}function t(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==n)return;var r,a,o=[],i=!0,s=!1;try{for(n=n.call(e);!(i=(r=n.next()).done)&&(o.push(r.value),!t||o.length!==t);i=!0);}catch(e){s=!0,a=e}finally{try{i||null==n.return||n.return()}finally{if(s)throw a}}return o}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return n(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return n(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function n(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function a(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?r(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}function s(e,t,n,r,a,o,i){try{var s=e[o](i),u=s.value}catch(e){return void n(e)}s.done?t(u):Promise.resolve(u).then(r,a)}function u(e){return function(){var t=this,n=arguments;return new Promise((function(r,a){var o=e.apply(t,n);function i(e){s(o,r,a,i,u,"next",e)}function u(e){s(o,r,a,i,u,"throw",e)}i(void 0)}))}}function c(e){var t,n,r,a=2;for("undefined"!=typeof Symbol&&(n=Symbol.asyncIterator,r=Symbol.iterator);a--;){if(n&&null!=(t=e[n]))return t.call(e);if(r&&null!=(t=e[r]))return new p(t.call(e));n="@@asyncIterator",r="@@iterator"}throw new TypeError("Object is not async iterable")}function p(e){function t(e){if(Object(e)!==e)return Promise.reject(new TypeError(e+" is not an object."));var t=e.done;return Promise.resolve(e.value).then((function(e){return{value:e,done:t}}))}return p=function(e){this.s=e,this.n=e.next},p.prototype={s:null,n:null,next:function(){return t(this.n.apply(this.s,arguments))},return:function(e){var n=this.s.return;return void 0===n?Promise.resolve({value:e,done:!0}):t(n.apply(this.s,arguments))},throw:function(e){var n=this.s.return;return void 0===n?Promise.reject(e):t(n.apply(this.s,arguments))}},new p(e)}function l(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:function(e){return e},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:10,r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1e3,a=arguments.length>4&&void 0!==arguments[4]?arguments[4]:"",o=n;return new Promise((function(n,i){var s=function(){var c=u(regeneratorRuntime.mark((function u(){var c;return regeneratorRuntime.wrap((function(u){for(;;)switch(u.prev=u.next){case 0:return u.prev=0,u.next=3,e();case 3:return c=u.sent,u.next=6,t(c);case 6:!u.sent&&o>0?(o--,console.log(a,"重试次数减少,剩余次数:",o),setTimeout(s,r)):(console.log(a,"返回结果:",c),n(c)),u.next=13;break;case 10:u.prev=10,u.t0=u.catch(0),o>0?(o--,console.log(a,"异常重试次数减少,剩余次数:",o),setTimeout(s,r)):(console.log(a,"重试次数已用完,错误信息:",u.t0),i(u.t0));case 13:case"end":return u.stop()}}),u,null,[[0,10]])})));return function(){return c.apply(this,arguments)}}();s()}))}function f(e){return e&&e.size}function h(e){return new Promise((function(t,n){var r=new FileReader;e.name,r.readAsArrayBuffer(e),r.addEventListener("loadend",(function(e){var n=e.target.result;t(n)}),!1)}))}Object.defineProperty(exports,"__esModule",{value:!0});var m,d={ALIYUN:"ALIYUN",TXYUN:"TXYUN",HUAWEI:"HUAWEI"},y=function(e){return m||(m=new g(e)),m},g=function(){function n(e){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,n),this._init(e)}var r,o,s,p,m,y,g,b,v,x,k;return r=n,o=[{key:"_init",value:(k=u(regeneratorRuntime.mark((function e(t){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:this.params=t;case 1:case"end":return e.stop()}}),e,this)}))),function(e){return k.apply(this,arguments)})},{key:"initOptions",value:(x=u(regeneratorRuntime.mark((function e(t){var n,r,o,i,s;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(this.params||(this.params={}),!t){e.next=3;break}return e.abrupt("return",this.params=a(a({},this.params),t));case 3:if((n=this.params).type,r=n.getOptionFun,o=n.path,i=n.getAuthInfoFunc,n.isUploadWebp,n.ossFailedApiOption,this.getAuthInfoFunc=i,this.options=a({},this.params),!r){e.next=15;break}return e.next=9,this._initOptionFun();case 9:if(s=e.sent){e.next=12;break}return e.abrupt("return");case 12:(o=o||s.path)&&!o.endsWith("/")&&(s.path=o+"/"),this.options=a(a({},this.options),s);case 15:case"end":return e.stop()}}),e,this)}))),function(e){return x.apply(this,arguments)})},{key:"_initOptionFun",value:(v=u(regeneratorRuntime.mark((function e(){var t=this;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",l((function(){return t.params.getOptionFun(t.params.type)}),(function(e){return null==e?void 0:e.endPoint}),5,300,"oss 初始化"));case 1:case"end":return e.stop()}}),e)}))),function(){return v.apply(this,arguments)})},{key:"_isTimeOut",value:function(){var e=this.options.timeOut-1e4;return(new Date).getTime()>e}},{key:"upload",value:(b=u(regeneratorRuntime.mark((function e(t){var n,r,a,o,i,s,u;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(t){e.next=2;break}return e.abrupt("return");case 2:n=Array.isArray(t)?t:[t],r=[],a=0;case 5:if(!(a<n.length)){e.next=16;break}return o=n[a],e.next=9,this.uploadFile(o);case 9:i=e.sent,s=i.data,u=i.head,r.push({index:a,url:s,ret:u.ret});case 13:a++,e.next=5;break;case 16:return e.abrupt("return",r);case 17:case"end":return e.stop()}}),e,this)}))),function(e){return b.apply(this,arguments)})},{key:"uploadFile",value:(g=u(regeneratorRuntime.mark((function e(t){var n,r,o,i,s,u=this,c=arguments;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=c.length>1&&void 0!==c[1]?c[1]:{},this.options&&null!==(n=this.options)&&void 0!==n&&n.endPoint&&!this._isTimeOut()){e.next=5;break}return console.log("初始化 oss 开始"),e.next=5,this.initOptions();case 5:return console.log("sadais uploader 上传文件内容",t),t=!f(t)&&f(t.path)?t.path:t,this.options=a(a({},this.options),r),console.log("当前上传配置信息",this.options),!t.name&&t.path&&(o=t.path.startsWith("blob"),i=t.path.startsWith("data"),s=o||i?".png":t.path.substring(t.path.lastIndexOf(".")),t.name=this._guid()+s),e.abrupt("return",new Promise((function(e,n){u.options.endPoint?u.options.isUploadWebp&&d.TXYUN==u.params.type&&u._fileIsPic(t.name)?u._putSubmit(e,n,t):u._formSubmit(e,n,t):(console.log("oss 初始化失败,走接口上传"),u._apiSubmit(e,n,t))})));case 11:case"end":return e.stop()}}),e,this)}))),function(e){return g.apply(this,arguments)})},{key:"uploadFiles",value:(y=u(regeneratorRuntime.mark((function e(t){var n,r,a,o,i,s,u,p,l,f,h,m=arguments;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=m.length>1&&void 0!==m[1]?m[1]:{},r=[],a=[],o=!1,i=!1,e.prev=5,u=c(t);case 7:return e.next=9,u.next();case 9:if(!(o=!(p=e.sent).done)){e.next=20;break}return l=p.value,e.next=13,this.uploadFile(l,n);case 13:f=e.sent,h=f.data,0===f.head.ret?r.push(h):a.push(h);case 17:o=!1,e.next=7;break;case 20:e.next=26;break;case 22:e.prev=22,e.t0=e.catch(5),i=!0,s=e.t0;case 26:if(e.prev=26,e.prev=27,!o||null==u.return){e.next=31;break}return e.next=31,u.return();case 31:if(e.prev=31,!i){e.next=34;break}throw s;case 34:return e.finish(31);case 35:return e.finish(26);case 36:return e.abrupt("return",{successUrls:r,failUrls:a});case 37:case"end":return e.stop()}}),e,this,[[5,22,26,36],[27,,31,35]])}))),function(e){return y.apply(this,arguments)})},{key:"_formSubmit",value:function(e,t,n){console.log("表单上传");var r=this.options.domain,a=this._buildParams(n),o=a.url,i={data:"".concat(r).concat(r.endsWith("/")?"":"/").concat(a.key),head:{ret:0,msg:"success"}},s={data:n.name,head:{ret:1,msg:"fail"}};try{uni.uploadFile({url:o,filePath:n.path,name:"file",formData:a,timeout:this.options.uploadTimeOut||1e4,success:function(n){200==n.statusCode?e(i):(s.head.msg=n,t(s))},fail:function(e){console.log(e),t(e)}})}catch(r){console.log("uni报错,调用XMLHttpRequest",r);var u=new FormData;Object.keys(a).forEach((function(e){u.append(e,a[e])})),u.append("file",n);var c=new XMLHttpRequest;c.timeout=this.options.uploadTimeOut||1e4,c.open("POST",o,!0),c.onreadystatechange=function(){c.readyState===XMLHttpRequest.DONE&&(200===c.status?e(i):t(s))},c.send(u)}}},{key:"_apiSubmit",value:(m=u(regeneratorRuntime.mark((function n(r,a,o){var i,s,u,c,p,f,h,m,d,y,g,b,v,x,k,w,O;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:return c=function(){return l((function(){return uni.uploadFile({url:s.api,filePath:o.path,name:"file",timeout:u||1e4})}),(function(e){var n=t(e,2)[1]||{},r=n.errMsg;return n.data,"uploadFile:ok"===r}),5,500,"api接口上传")},console.log("api接口上传"),i=this.options,s=i.ossFailedApiOption,u=i.uploadTimeOut,p={data:"",head:{ret:0,msg:"success"}},f={data:o.name,head:{ret:1,msg:"fail"}},n.prev=5,n.next=8,c();case 8:h=n.sent,m=t(h,2),"object"!==e(d=m[1])&&a(f),g=(y=d||{}).errMsg,b=y.data,g&&"uploadFile:ok"===g||(f.head.msg=g,a(f)),v=JSON.parse(b),x=v.data,k=v.head,w=(k=void 0===k?{}:k).ret,O=k.msg,w!==s.successRetCode?(f.head.msg=O,a(f)):(p.data=x.url,r(p)),n.next=23;break;case 20:n.prev=20,n.t0=n.catch(5),a(n.t0);case 23:case"end":return n.stop()}}),n,this,[[5,20]])}))),function(e,t,n){return m.apply(this,arguments)})},{key:"_putSubmit",value:(p=u(regeneratorRuntime.mark((function e(t,n,r){var a,o,i,s,c,p,l,m,d,y,g,b,v,x,k,w,O,P=this;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return console.log("腾讯put上传"),a=this.options,o=a.domain,i=a.ossFailedApiOption,s=this._buildParams(r),c=s.url+"/"+s.key,p=JSON.stringify({is_pic_info:1,rules:[{fileid:"/"+s.key,rule:"imageMogr2/format/webp"}]}),l={httpMethodName:"PUT",resoucePath:"/"+s.key,storage:this.params.type,headerMap:{"Pic-Operations":p}},m={},e.prev=7,console.log("获取权限信息"),e.next=11,this.getAuthInfoFunc(l);case 11:if(m=e.sent,console.log("获取权限结果",m),m.content){e.next=15;break}return e.abrupt("return",this._apiSubmit(t,n,r));case 15:e.next=21;break;case 17:return e.prev=17,e.t0=e.catch(7),console.log("获取权限失败",e.t0),e.abrupt("return",this._apiSubmit(t,n,r));case 21:if(d=m?m.content:""){e.next=24;break}return e.abrupt("return",n(b));case 24:y="".concat(o).concat(o.endsWith("/")?"":"/").concat(s.key),g={data:y,head:{ret:0,msg:"success"}},b={data:r.name,head:{ret:1,msg:"fail"}},v=function(){var e=u(regeneratorRuntime.mark((function e(a){var o,s;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(console.log("上传数据",a),e.prev=1,o=a,!f(a)){e.next=7;break}return e.next=6,h(r);case 6:o=e.sent;case 7:uni.request({url:c,method:"PUT",data:o,header:{Authorization:d,"Pic-Operations":p},timeout:P.options.uploadTimeOut||1e4,success:function(e){console.log("上传结果",e),200==e.statusCode?t(g):i?P._apiSubmit(t,n,r):(b.head.msg=e,n(b))},fail:function(e){console.log("上传失败",i),i?P._apiSubmit(t,n,r):(console.log(e),n(e))}}),e.next=19;break;case 10:e.prev=10,e.t0=e.catch(1),console.log("web环境"),(s=new XMLHttpRequest).open("PUT",c,!0),s.setRequestHeader("Authorization",d),s.setRequestHeader("Pic-Operations",p),s.onreadystatechange=function(){s.readyState===XMLHttpRequest.DONE&&(200===s.status?t(g):n(b))},s.send(a);case 19:case"end":return e.stop()}}),e,null,[[1,10]])})));return function(t){return e.apply(this,arguments)}}(),e.prev=28,console.log("微信环境"),x=uni.getFileSystemManager(),k=x.readFileSync(r.path),v(k),e.next=48;break;case 35:if(e.prev=35,e.t1=e.catch(28),console.log("H5环境"),!r.type){e.next=42;break}v(r),e.next=48;break;case 42:return e.next=44,fetch(r.path).then((function(e){return e.blob()}));case 44:w=e.sent,(O=new FileReader).onload=function(){v(O.result)},O.readAsArrayBuffer(w);case 48:case"end":return e.stop()}}),e,this,[[7,17],[28,35]])}))),function(e,t,n){return p.apply(this,arguments)})},{key:"_fileIsPic",value:function(e){var t=e.substring(e.lastIndexOf(".")+1);return["png","jpg","jpeg","gif","bmp","webp","avif","heif","tpg","psd"].includes(t.toLowerCase())}},{key:"_buildParams",value:function(e){var t=this.options,n=t.type,r={name:e.name,policy:t.policy,success_action_status:"200",key:this._getUploadFilePath(e.name)},a=t.endPoint.replace("https://","").replace("http://","");return d.TXYUN===n?(r["q-ak"]=t.accessKeyId,r["q-signature"]=t.signature,r["q-sign-algorithm"]="sha1",r["q-key-time"]=t.param["q-sign-time"],r.url="https://".concat(t.bucketName,".cos.").concat(a,".myqcloud.com")):d.HUAWEI===n?(r.AccessKeyId=t.accessKeyId,r.signature=t.signature,r.url="https://".concat(t.bucketName,".obs.").concat(a,".myhuaweicloud.com")):(r.signature=t.signature,r.OSSAccessKeyId=t.accessKeyId,r.bucket=t.bucketName,r.url="https://".concat(t.bucketName,".").concat(a)),r}},{key:"_getUploadFilePath",value:function(e){this.params.type;var t=this.options,n=t.useOriginalName,r=t.path,a=e.lastIndexOf("."),o=e.substring(0,a),i=e.substring(a+1),s=n?"/".concat(o):"";return"".concat(r).concat(this._getNowDate(),"/").concat(this._guid()).concat(s,".").concat(i)}},{key:"_getNowDate",value:function(){var e=new Date,t=e.getFullYear(),n=e.getMonth()+1,r=e.getDate();return n<10&&(n="0".concat(n)),r<10&&(r="0".concat(r)),"".concat(t).concat(n).concat(r)}},{key:"_guid",value:function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){var t=16*Math.random()|0;return("x"==e?t:3&t|8).toString(16)}))}}],o&&i(r.prototype,o),s&&i(r,s),Object.defineProperty(r,"prototype",{writable:!1}),n}();exports.DEFAULT_OPTIONS={},exports.UPLOADER_TYPE=d,exports.UploaderInstance=y;
|