@nocobase/plugin-file-manager 2.1.0-beta.32 → 2.1.0-beta.33

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.
Files changed (45) hide show
  1. package/dist/client-v2/450.f590b4c220108742.js +10 -0
  2. package/dist/client-v2/index.d.ts +1 -0
  3. package/dist/client-v2/index.js +1 -1
  4. package/dist/externalVersion.js +10 -12
  5. package/dist/node_modules/@aws-sdk/client-s3/package.json +1 -1
  6. package/dist/node_modules/@aws-sdk/lib-storage/package.json +1 -1
  7. package/dist/node_modules/ali-oss/package.json +1 -1
  8. package/dist/node_modules/cos-nodejs-sdk-v5/.github/workflows/auto-changelog.yml +55 -0
  9. package/dist/node_modules/cos-nodejs-sdk-v5/.prettierrc +10 -0
  10. package/dist/node_modules/cos-nodejs-sdk-v5/.travis.yml +16 -0
  11. package/dist/node_modules/cos-nodejs-sdk-v5/LICENSE +21 -0
  12. package/dist/node_modules/cos-nodejs-sdk-v5/demo/crc64.js +9 -0
  13. package/dist/node_modules/cos-nodejs-sdk-v5/demo/demo-sts-scope.js +75 -0
  14. package/dist/node_modules/cos-nodejs-sdk-v5/demo/demo-sts.js +65 -0
  15. package/dist/node_modules/cos-nodejs-sdk-v5/demo/demo.js +4542 -0
  16. package/dist/node_modules/cos-nodejs-sdk-v5/demo/util.js +135 -0
  17. package/dist/node_modules/cos-nodejs-sdk-v5/index.d.ts +2610 -0
  18. package/dist/node_modules/{multer-cos → cos-nodejs-sdk-v5}/index.js +2 -2
  19. package/dist/node_modules/cos-nodejs-sdk-v5/package.json +1 -0
  20. package/dist/node_modules/cos-nodejs-sdk-v5/sdk/advance.js +1659 -0
  21. package/dist/node_modules/cos-nodejs-sdk-v5/sdk/async.js +59 -0
  22. package/dist/node_modules/cos-nodejs-sdk-v5/sdk/base.js +4404 -0
  23. package/dist/node_modules/cos-nodejs-sdk-v5/sdk/cos.js +137 -0
  24. package/dist/node_modules/cos-nodejs-sdk-v5/sdk/event.js +34 -0
  25. package/dist/node_modules/cos-nodejs-sdk-v5/sdk/select-stream.js +181 -0
  26. package/dist/node_modules/cos-nodejs-sdk-v5/sdk/session.js +126 -0
  27. package/dist/node_modules/cos-nodejs-sdk-v5/sdk/task.js +255 -0
  28. package/dist/node_modules/cos-nodejs-sdk-v5/sdk/util.js +776 -0
  29. package/dist/node_modules/cos-nodejs-sdk-v5/test/csp.js +1302 -0
  30. package/dist/node_modules/cos-nodejs-sdk-v5/test/test.js +6119 -0
  31. package/dist/node_modules/mime-match/package.json +1 -1
  32. package/dist/node_modules/mime-types/package.json +1 -1
  33. package/dist/node_modules/mkdirp/package.json +1 -1
  34. package/dist/node_modules/url-join/package.json +1 -1
  35. package/dist/server/storages/tx-cos.d.ts +16 -1
  36. package/dist/server/storages/tx-cos.js +111 -10
  37. package/package.json +2 -3
  38. package/dist/client/StorageOptions.d.ts +0 -10
  39. package/dist/client-v2/450.24143827c94b9dca.js +0 -10
  40. package/dist/client-v2/501.37bff0473d880acd.js +0 -10
  41. package/dist/client-v2/885.b832814bff4497c8.js +0 -10
  42. package/dist/node_modules/multer-cos/LICENSE +0 -24
  43. package/dist/node_modules/multer-cos/demo/index.js +0 -39
  44. package/dist/node_modules/multer-cos/demo/myMulter.js +0 -88
  45. package/dist/node_modules/multer-cos/package.json +0 -1
@@ -0,0 +1,1302 @@
1
+ var fs = require('fs');
2
+ var path = require('path');
3
+ var COS = require('../index');
4
+ var request = require('request');
5
+ var util = require('../demo/util');
6
+ var config = require('../demo/config');
7
+ var Writable = require('stream').Writable;
8
+
9
+ if (process.env.AppId) {
10
+ config = {
11
+ SecretId: process.env.SecretId,
12
+ SecretKey: process.env.SecretKey,
13
+ Bucket: process.env.Bucket, // Bucket 格式:test-1250000000
14
+ Region: process.env.Region
15
+ }
16
+ }
17
+
18
+ var cos = new COS({
19
+ SecretId: config.SecretId,
20
+ SecretKey: config.SecretKey,
21
+ ChunkParallelLimit: 10,
22
+ IgnoreRegionFormat: true,
23
+ Protocol: 'http:',
24
+ ServiceDomain: 'http://cos.default.xxx.com',
25
+ Domain: 'http://{{Bucket}}-{{AppId}}.cos.{{Region}}.xxx.com',
26
+ });
27
+
28
+ var AppId = config.AppId;
29
+ var Bucket = config.Bucket;
30
+ var BucketShortName = Bucket;
31
+ var BucketLongName = Bucket + '-' + AppId;
32
+
33
+ var match = config.Bucket.match(/^(.+)-(\d+)$/);
34
+ if (match) {
35
+ BucketLongName = config.Bucket; // Bucket 格式:test-1250000000
36
+ BucketShortName = match[1];
37
+ AppId = match[2];
38
+ }
39
+
40
+ var assert = require("assert");
41
+ assert.ok = assert;
42
+
43
+ function prepareBucket() {
44
+ return new Promise(function (resolve, reject) {
45
+ cos.putBucket({
46
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
47
+ Region: config.Region
48
+ }, function (err, data) {
49
+ resolve();
50
+ });
51
+ });
52
+ }
53
+
54
+ function prepareBigObject() {
55
+ return new Promise(function (resolve, reject) {
56
+ // 创建测试文件
57
+ var filename = 'bigger.zip';
58
+ var filepath = path.resolve(__dirname, filename);
59
+ var put = function () {
60
+ // 调用方法
61
+ cos.putObject({
62
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
63
+ Region: config.Region,
64
+ Key: filename,
65
+ Body: fs.createReadStream(filepath),
66
+ ContentLength: fs.statSync(filepath).size,
67
+ }, function (err, data) {
68
+ err ? reject(err) : resolve()
69
+ });
70
+ };
71
+ if (fs.existsSync(filepath)) {
72
+ put();
73
+ } else {
74
+ util.createFile(filepath, 1024 * 1024 * 10, put);
75
+ }
76
+ });
77
+ }
78
+
79
+ function comparePlainObject(a, b) {
80
+ a instanceof Array && a.sort();
81
+ b instanceof Array && b.sort();
82
+ // var sep = '||||||';
83
+ // if (a instanceof Array && b instanceof Array) {
84
+ // return a.join(sep) === b.join(sep);
85
+ // }
86
+ if (Object.keys(a).length !== Object.keys(b).length) {
87
+ return false;
88
+ }
89
+ for (var key in a) {
90
+ if (typeof a[key] === 'object' && typeof b[key] === 'object') {
91
+ if (!comparePlainObject(a[key], b[key])) {
92
+ return false;
93
+ }
94
+ } else if (a[key] != b[key]) {
95
+ return false;
96
+ }
97
+ }
98
+ return true;
99
+ }
100
+
101
+ describe('getService()', function () {
102
+ this.timeout(60000);
103
+ it('能正常列出 Bucket', function (done) {
104
+ prepareBucket().then(function () {
105
+ cos.getService(function (err, data) {
106
+ var hasBucket = false;
107
+ data.Buckets && data.Buckets.forEach(function (item) {
108
+ if (item.Name === BucketLongName && (item.Location === config.Region || !item.Location)) {
109
+ hasBucket = true;
110
+ }
111
+ });
112
+ assert.equal(true, hasBucket);
113
+ done();
114
+ });
115
+ }).catch(function () {
116
+ });
117
+ });
118
+ });
119
+
120
+ describe('getAuth()', function () {
121
+ this.timeout(60000);
122
+ it('通过获取签名能正常获取文件', function (done) {
123
+ var content = Date.now().toString();
124
+ var key = '1.txt';
125
+ prepareBucket().then(function () {
126
+ cos.putObject({
127
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
128
+ Region: config.Region,
129
+ Key: key,
130
+ Body: Buffer.from(content)
131
+ }, function (err, data) {
132
+ var auth = cos.getAuth({
133
+ Method: 'get',
134
+ Key: key
135
+ });
136
+ var link = 'http://' + BucketLongName + '.cos.' + config.Region + '.yun.ccb.com/' + key +
137
+ '?sign=' + encodeURIComponent(auth);
138
+ request(link, function (err, response, body) {
139
+ assert.ok(response.statusCode === 200);
140
+ assert.ok(body === content);
141
+ done();
142
+ });
143
+ });
144
+ }).catch(function () {
145
+ });
146
+ });
147
+ });
148
+
149
+ describe('auth check', function () {
150
+ this.timeout(60000);
151
+ it('auth check !\'$()*', function (done) {
152
+ cos.getBucket({
153
+ Bucket: config.Bucket,
154
+ Region: config.Region,
155
+ Prefix: 'aksjhdlash sajlhj!@#$%^&*()_+=-[]{}\';:"/.<>?.,??sadasd#/.,/~`',
156
+ Headers: {
157
+ // !'$()* // 包含这几个特殊字符就出错
158
+ 'x-cos-test': 'aksjhdlash sajlhj!@#$%^&*()_+=-[]{}\';:\"/.<>?.,??sadasd#/.,/~`',
159
+ },
160
+ }, function (err, data) {
161
+ assert.ok(!err);
162
+ done();
163
+ });
164
+ });
165
+ });
166
+
167
+ describe('putBucket()', function () {
168
+ this.timeout(60000);
169
+ var NewBucket = 'test-put-bucket-' + AppId;
170
+ it('正常创建 bucket', function (done) {
171
+ cos.putBucket({
172
+ Bucket: NewBucket,
173
+ Region: config.Region
174
+ }, function (err, data) {
175
+ assert.equal(NewBucket + '.cos.' + config.Region + '.yun.ccb.com', data.Location);
176
+ cos.headBucket({
177
+ Bucket: NewBucket,
178
+ Region: config.Region
179
+ }, function (err, data) {
180
+ assert.ok(data);
181
+ cos.deleteBucket({
182
+ Bucket: NewBucket,
183
+ Region: config.Region
184
+ }, function (err, data) {
185
+ done();
186
+ });
187
+ });
188
+ });
189
+ });
190
+ });
191
+
192
+ describe('getBucket()', function () {
193
+ this.timeout(60000);
194
+ it('正常获取 bucket 里的文件列表', function (done) {
195
+ prepareBucket().then(function () {
196
+ cos.getBucket({
197
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
198
+ Region: config.Region
199
+ }, function (err, data) {
200
+ assert.equal(true, data.Name === BucketLongName);
201
+ assert.equal(data.Contents.constructor, Array);
202
+ done();
203
+ });
204
+ }).catch(function () {
205
+ assert.equal(false);
206
+ done();
207
+ });
208
+ });
209
+ });
210
+
211
+ describe('putObject()', function () {
212
+ this.timeout(60000);
213
+ var filename = '1.txt';
214
+ var filepath = path.resolve(__dirname, filename);
215
+ var getObjectContent = function (callback) {
216
+ var objectContent = Buffer.from([]);
217
+ var outputStream = new Writable({
218
+ write: function (chunk, encoding, callback) {
219
+ objectContent = Buffer.concat([objectContent, chunk]);
220
+ }
221
+ });
222
+ setTimeout(function () {
223
+ cos.getObject({
224
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
225
+ Region: config.Region,
226
+ Key: filename,
227
+ Output: outputStream
228
+ }, function (err, data) {
229
+ var content = objectContent.toString();
230
+ callback(content);
231
+ });
232
+ }, 2000);
233
+ };
234
+ it('fs.createReadStream 创建 object', function (done) {
235
+ var content = Date.now().toString();
236
+ fs.writeFileSync(filepath, content);
237
+ var lastPercent = 0;
238
+ cos.putObject({
239
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
240
+ Region: config.Region,
241
+ Key: filename,
242
+ Body: fs.createReadStream(filepath),
243
+ ContentLength: fs.statSync(filepath).size,
244
+ onProgress: function (processData) {
245
+ lastPercent = processData.percent;
246
+ },
247
+ }, function (err, data) {
248
+ if (err) throw err;
249
+ assert.ok(data.ETag.length > 0);
250
+ fs.unlinkSync(filepath);
251
+ getObjectContent(function (objectContent) {
252
+ assert.ok(objectContent === content);
253
+ done();
254
+ // cos.putObjectCopy({
255
+ // Bucket: config.Bucket, // Bucket 格式:test-1250000000
256
+ // Region: config.Region,
257
+ // //ServerSideEncryption: 'AES256',
258
+ // Key: '1.copy.text',
259
+ // CopySource: config.Bucket + '.cos.' + config.Region + '.yun.ccb.com/' + filename, // Bucket 格式:test-1250000000
260
+ // }, function (err, data) {
261
+ // assert.ok(!err);
262
+ // assert.ok(data.ETag.length > 0);
263
+ // done();
264
+ // });
265
+ });
266
+ });
267
+ });
268
+ it('fs.readFileSync 创建 object', function (done) {
269
+ var content = Date.now().toString();
270
+ fs.writeFileSync(filepath, content);
271
+ var lastPercent = 0;
272
+ cos.putObject({
273
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
274
+ Region: config.Region,
275
+ Key: filename,
276
+ Body: fs.readFileSync(filepath),
277
+ onProgress: function (processData) {
278
+ lastPercent = processData.percent;
279
+ },
280
+ }, function (err, data) {
281
+ if (err) throw err;
282
+ assert.ok(data.ETag.length > 0);
283
+ fs.unlinkSync(filepath);
284
+ getObjectContent(function (objectContent) {
285
+ assert.ok(objectContent === content);
286
+ done();
287
+ });
288
+ });
289
+ });
290
+ it('捕获输入流异常', function (done) {
291
+ var filename = 'big.zip';
292
+ var filepath = path.resolve(__dirname, filename);
293
+ var put = function () {
294
+ var Body = fs.createReadStream(filepath);
295
+ setTimeout(function () {
296
+ Body.emit('error', new Error('some error'))
297
+ }, 1000);
298
+ cos.putObject({
299
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
300
+ Region: config.Region,
301
+ Key: filename,
302
+ Body: Body,
303
+ ContentLength: fs.statSync(filepath).size,
304
+ }, function (err, data) {
305
+ fs.unlinkSync(filepath);
306
+ done();
307
+ });
308
+ };
309
+ if (fs.existsSync(filepath)) {
310
+ put();
311
+ } else {
312
+ util.createFile(filepath, 5 << 20, put);
313
+ }
314
+ });
315
+ it('putObject(),buffer', function (done) {
316
+ var content = Buffer.from('中文_' + Date.now());
317
+ cos.putObject({
318
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
319
+ Region: config.Region,
320
+ Key: '1.txt',
321
+ Body: content,
322
+ }, function (err, data) {
323
+ var ETag = data.ETag;
324
+ assert.ok(!err && ETag);
325
+ cos.getObject({
326
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
327
+ Region: config.Region,
328
+ Key: filename
329
+ }, function (err, data) {
330
+ assert.ok(data.Body && data.Body.toString() === content.toString() && (data.headers && data.headers.etag) === ETag);
331
+ done();
332
+ });
333
+ });
334
+ });
335
+ it('putObject(),buffer,empty', function (done) {
336
+ var content = Buffer.from('');
337
+ cos.putObject({
338
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
339
+ Region: config.Region,
340
+ Key: '1.txt',
341
+ Body: content,
342
+ }, function (err, data) {
343
+ var ETag = data.ETag;
344
+ assert.ok(!err && ETag);
345
+ cos.getObject({
346
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
347
+ Region: config.Region,
348
+ Key: filename
349
+ }, function (err, data) {
350
+ assert.ok(data.Body && data.Body.toString() === content.toString() && (data.headers && data.headers.etag) === ETag);
351
+ done();
352
+ });
353
+ });
354
+ });
355
+ it('putObject(),string', function (done) {
356
+ var content = '中文_' + Date.now();
357
+ cos.putObject({
358
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
359
+ Region: config.Region,
360
+ Key: '1.txt',
361
+ Body: content,
362
+ }, function (err, data) {
363
+ var ETag = data.ETag;
364
+ assert.ok(!err && ETag);
365
+ cos.getObject({
366
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
367
+ Region: config.Region,
368
+ Key: filename
369
+ }, function (err, data) {
370
+ assert.ok(data.Body && data.Body.toString() === content.toString() && (data.headers && data.headers.etag) === ETag);
371
+ done();
372
+ });
373
+ });
374
+ });
375
+ it('putObject(),string,empty', function (done) {
376
+ var content = '';
377
+ cos.putObject({
378
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
379
+ Region: config.Region,
380
+ Key: '1.txt',
381
+ Body: content,
382
+ }, function (err, data) {
383
+ var ETag = data.ETag;
384
+ assert.ok(!err && ETag);
385
+ cos.getObject({
386
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
387
+ Region: config.Region,
388
+ Key: filename
389
+ }, function (err, data) {
390
+ assert.ok(data.Body && data.Body.toString() === content && (data.headers && data.headers.etag) === ETag);
391
+ done();
392
+ });
393
+ });
394
+ });
395
+ });
396
+
397
+ describe('getObject()', function () {
398
+ this.timeout(60000);
399
+ it('stream', function (done) {
400
+ var key = '1.txt';
401
+ var objectContent = Buffer.from([]);
402
+ var outputStream = new Writable({
403
+ write: function (chunk, encoding, callback) {
404
+ objectContent = Buffer.concat([objectContent, chunk]);
405
+ }
406
+ });
407
+ var content = Date.now().toString(36);
408
+ cos.putObject({
409
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
410
+ Region: config.Region,
411
+ Key: key,
412
+ Body: Buffer.from(content)
413
+ }, function (err, data) {
414
+ setTimeout(function () {
415
+ cos.getObject({
416
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
417
+ Region: config.Region,
418
+ Key: key,
419
+ Output: outputStream
420
+ }, function (err, data) {
421
+ if (err) throw err;
422
+ objectContent = objectContent.toString();
423
+ assert.ok(data.headers['content-length'] === '' + content.length);
424
+ assert.ok(objectContent === content);
425
+ cos.headObject({
426
+ Bucket: config.Bucket,
427
+ Region: config.Region,
428
+ Key: key
429
+ }, function (err, data) {
430
+ assert.ok(!err);
431
+ done();
432
+ });
433
+ });
434
+ }, 2000);
435
+ });
436
+ });
437
+ it('body', function (done) {
438
+ var key = '1.txt';
439
+ var content = Date.now().toString();
440
+ cos.putObject({
441
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
442
+ Region: config.Region,
443
+ Key: key,
444
+ Body: Buffer.from(content)
445
+ }, function (err, data) {
446
+ setTimeout(function () {
447
+ cos.getObject({
448
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
449
+ Region: config.Region,
450
+ Key: key
451
+ }, function (err, data) {
452
+ if (err) throw err;
453
+ var objectContent = data.Body.toString();
454
+ assert.ok(data.headers['content-length'] === '' + content.length);
455
+ assert.ok(objectContent === content);
456
+ done();
457
+ });
458
+ }, 2000);
459
+ });
460
+ });
461
+ });
462
+
463
+ describe('putObjectCopy()', function () {
464
+ this.timeout(60000);
465
+ var fileName = '1.txt';
466
+ it('正常复制 object', function (done) {
467
+ cos.putObjectCopy({
468
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
469
+ Region: config.Region,
470
+ Key: '1.copy.txt',
471
+ CopySource: config.Bucket + '.cos.' + config.Region + '.yun.ccb.com/' + fileName,
472
+ }, function (err, data) {
473
+ assert.ok(!err);
474
+ assert.ok(data.ETag.length > 0);
475
+ done();
476
+ });
477
+ });
478
+ it('捕获 object 异常', function (done) {
479
+ var errFileName = '12345.txt';
480
+ cos.putObjectCopy({
481
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
482
+ Region: config.Region,
483
+ Key: '1.copy.txt',
484
+ CopySource: config.Bucket + '.cos.' + config.Region + '.yun.ccb.com/' + errFileName,
485
+ }, function (err, data) {
486
+ assert.equal(true, err.statusCode === 404);
487
+ assert.equal(true, err.error.Code === 'NoSuchKey')
488
+ done();
489
+ });
490
+ });
491
+ });
492
+
493
+ describe('sliceCopyFile()', function () {
494
+ this.timeout(60000);
495
+ var fileName = 'bigger.zip';
496
+ var filepath = path.resolve(__dirname, fileName);
497
+ var Key = 'bigger.copy.zip';
498
+ it('正常分片复制 object', function (done) {
499
+ prepareBigObject().then(function () {
500
+ cos.sliceCopyFile({
501
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
502
+ Region: config.Region,
503
+ Key: Key,
504
+ CopySource: config.Bucket + '.cos.' + config.Region + '.yun.ccb.com/'+ fileName,
505
+ SliceSize: 5 * 1024 * 1024,
506
+ },function (err, data) {
507
+ if (err) throw err;
508
+ assert.ok(data.ETag.length > 0);
509
+ fs.unlinkSync(filepath);
510
+ done();
511
+ });
512
+ }).catch(function (err) {
513
+ assert.equal(false);
514
+ done();
515
+ });
516
+ });
517
+ it('单片复制 object', function (done) {
518
+ prepareBigObject().then(function () {
519
+ cos.sliceCopyFile({
520
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
521
+ Region: config.Region,
522
+ Key: Key,
523
+ CopySource: config.Bucket + '.cos.' + config.Region + '.yun.ccb.com/'+ fileName,
524
+ SliceSize: 10 * 1024 * 1024,
525
+ },function (err,data) {
526
+ if (err) throw err;
527
+ assert.ok(data.ETag.length > 0);
528
+ fs.unlinkSync(filepath);
529
+ done();
530
+ });
531
+ }).catch(function () {
532
+ assert.equal(false);
533
+ done();
534
+ });
535
+ });
536
+ });
537
+
538
+ describe('sliceUploadFile()', function () {
539
+ this.timeout(120000);
540
+
541
+ it('正常分片上传 object', function (done) {
542
+ var filename = '3mb.zip';
543
+ var filepath = path.resolve(__dirname, filename);
544
+ var put = function () {
545
+ var lastPercent = 0;
546
+ cos.sliceUploadFile({
547
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
548
+ Region: config.Region,
549
+ Key: filename,
550
+ FilePath: filepath,
551
+ SliceSize: 1024 * 1024,
552
+ AsyncLimit: 5,
553
+ onProgress: function (progressData) {
554
+ lastPercent = progressData.percent;
555
+ },
556
+ }, function (err, data) {
557
+ assert.equal(true, data.ETag.length > 0 && lastPercent === 1);
558
+ fs.unlinkSync(filepath);
559
+ done();
560
+ });
561
+ };
562
+ if (fs.existsSync(filepath)) {
563
+ put();
564
+ } else {
565
+ util.createFile(filepath, 3 * 1024 * 1024, put);
566
+ }
567
+ });
568
+ });
569
+
570
+ (function () {
571
+ var AccessControlPolicy = {
572
+ "Owner": {
573
+ "ID": 'qcs::cam::uin/100004603008:uin/100004603008' // 100004603008 是 QQ 号
574
+ },
575
+ "Grants": [{
576
+ "Grantee": {
577
+ "ID": "qcs::cam::uin/100004603008:uin/100004603008", // 100004603008 是 QQ 号
578
+ },
579
+ "Permission": "READ"
580
+ }]
581
+ };
582
+ var AccessControlPolicy2 = {
583
+ "Owner": {
584
+ "ID": 'qcs::cam::uin/100004603008:uin/100004603008' // 100004603008 是 QQ 号
585
+ },
586
+ "Grant": {
587
+ "Grantee": {
588
+ "ID": "qcs::cam::uin/100004603008:uin/100004603008", // 100004603008 是 QQ 号
589
+ },
590
+ "Permission": "READ"
591
+ }
592
+ };
593
+ describe('BucketAcl', function () {
594
+ this.timeout(60000);
595
+ it('putBucketAcl() header ACL:private', function (done) {
596
+ cos.putBucketAcl({
597
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
598
+ Region: config.Region,
599
+ ACL: 'private'
600
+ }, function (err, data) {
601
+ assert.ok(!err);
602
+ cos.getBucketAcl({
603
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
604
+ Region: config.Region
605
+ }, function (err, data) {
606
+ AccessControlPolicy.Owner.ID = data.Owner.ID;
607
+ AccessControlPolicy2.Owner.ID = data.Owner.ID;
608
+ assert.ok(data.ACL === 'private' || data.ACL === 'default');
609
+ done();
610
+ });
611
+ });
612
+ });
613
+ it('putBucketAcl() header ACL:public-read', function (done) {
614
+ cos.putBucketAcl({
615
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
616
+ Region: config.Region,
617
+ ACL: 'public-read',
618
+ }, function (err, data) {
619
+ assert.ok(!err);
620
+ cos.getBucketAcl({Bucket: config.Bucket, Region: config.Region}, function (err, data) { // Bucket 格式:test-1250000000
621
+ assert.ok(data.ACL === 'public-read');
622
+ done();
623
+ });
624
+ });
625
+ });
626
+ it('putBucketAcl() header ACL:public-read-write', function (done) {
627
+ cos.putBucketAcl({
628
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
629
+ Region: config.Region,
630
+ ACL: 'public-read-write',
631
+ }, function (err, data) {
632
+ assert.ok(!err);
633
+ cos.getBucketAcl({Bucket: config.Bucket, Region: config.Region}, function (err, data) { // Bucket 格式:test-1250000000
634
+ assert.ok(data.ACL === 'public-read-write');
635
+ done();
636
+ });
637
+ });
638
+ });
639
+ it('putBucketAcl() header GrantRead:1001,1002', function (done) {
640
+ var GrantRead = 'id="qcs::cam::uin/1001:uin/1001", id="qcs::cam::uin/1002:uin/1002"';
641
+ cos.putBucketAcl({
642
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
643
+ Region: config.Region,
644
+ GrantRead: GrantRead,
645
+ }, function (err, data) {
646
+ assert.ok(!err);
647
+ cos.getBucketAcl({Bucket: config.Bucket, Region: config.Region}, function (err, data) { // Bucket 格式:test-1250000000
648
+ assert.ok(data.GrantRead = GrantRead);
649
+ done();
650
+ });
651
+ });
652
+ });
653
+ it('putBucketAcl() header GrantWrite:1001,1002', function (done) {
654
+ var GrantWrite = 'id="qcs::cam::uin/1001:uin/1001", id="qcs::cam::uin/1002:uin/1002"';
655
+ cos.putBucketAcl({
656
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
657
+ Region: config.Region,
658
+ GrantWrite: GrantWrite,
659
+ }, function (err, data) {
660
+ assert.ok(!err);
661
+ cos.getBucketAcl({Bucket: config.Bucket, Region: config.Region}, function (err, data) { // Bucket 格式:test-1250000000
662
+ assert.ok(data.GrantWrite = GrantWrite);
663
+ done();
664
+ });
665
+ });
666
+ });
667
+ it('putBucketAcl() header GrantFullControl:1001,1002', function (done) {
668
+ var GrantFullControl = 'id="qcs::cam::uin/1001:uin/1001", id="qcs::cam::uin/1002:uin/1002"';
669
+ cos.putBucketAcl({
670
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
671
+ Region: config.Region,
672
+ GrantFullControl: GrantFullControl,
673
+ }, function (err, data) {
674
+ assert.ok(!err);
675
+ cos.getBucketAcl({Bucket: config.Bucket, Region: config.Region}, function (err, data) { // Bucket 格式:test-1250000000
676
+ assert.ok(data.GrantFullControl = GrantFullControl);
677
+ done();
678
+ });
679
+ });
680
+ });
681
+ it('putBucketAcl() header ACL:public-read, GrantFullControl:1001,1002', function (done) {
682
+ var GrantFullControl = 'id="qcs::cam::uin/1001:uin/1001", id="qcs::cam::uin/1002:uin/1002"';
683
+ cos.putBucketAcl({
684
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
685
+ Region: config.Region,
686
+ GrantFullControl: GrantFullControl,
687
+ ACL: 'public-read',
688
+ }, function (err, data) {
689
+ assert.ok(!err);
690
+ cos.getBucketAcl({Bucket: config.Bucket, Region: config.Region}, function (err, data) { // Bucket 格式:test-1250000000
691
+ assert.ok(data.GrantFullControl = GrantFullControl);
692
+ assert.ok(data.ACL === 'public-read');
693
+ done();
694
+ });
695
+ });
696
+ });
697
+ it('putBucketAcl() xml', function (done) {
698
+ cos.putBucketAcl({
699
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
700
+ Region: config.Region,
701
+ AccessControlPolicy: AccessControlPolicy,
702
+ }, function (err, data) {
703
+ assert.ok(!err);
704
+ cos.getBucketAcl({Bucket: config.Bucket, Region: config.Region}, function (err, data) { // Bucket 格式:test-1250000000
705
+ assert.ok(data.Grants.length === 1);
706
+ assert.ok(data.Grants[0] && data.Grants[0].Grantee.ID === 'qcs::cam::uin/100004603008:uin/100004603008', '设置 AccessControlPolicy ID 正确');
707
+ assert.ok(data.Grants[0] && data.Grants[0].Permission === 'READ', '设置 AccessControlPolicy Permission 正确');
708
+ done();
709
+ });
710
+ });
711
+ });
712
+ it('putBucketAcl() xml2', function (done) {
713
+ cos.putBucketAcl({
714
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
715
+ Region: config.Region,
716
+ AccessControlPolicy: AccessControlPolicy2,
717
+ }, function (err, data) {
718
+ assert.ok(!err);
719
+ cos.getBucketAcl({Bucket: config.Bucket, Region: config.Region}, function (err, data) { // Bucket 格式:test-1250000000
720
+ assert.ok(data.Grants.length === 1);
721
+ assert.ok(data.Grants[0] && data.Grants[0].Grantee.ID === 'qcs::cam::uin/100004603008:uin/100004603008');
722
+ assert.ok(data.Grants[0] && data.Grants[0].Permission === 'READ');
723
+ done();
724
+ });
725
+ });
726
+ });
727
+ it('putBucketAcl() decodeAcl', function (done) {
728
+ cos.getBucketAcl({
729
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
730
+ Region: config.Region
731
+ }, function (err, data) {
732
+ cos.putBucketAcl({
733
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
734
+ Region: config.Region,
735
+ GrantFullControl: data.GrantFullControl,
736
+ GrantWrite: data.GrantWrite,
737
+ GrantRead: data.GrantRead,
738
+ ACL: data.ACL,
739
+ }, function (err, data) {
740
+ assert.ok(data);
741
+ done();
742
+ });
743
+ });
744
+ });
745
+ });
746
+ })();
747
+
748
+ (function () {
749
+ var AccessControlPolicy = {
750
+ "Owner": {
751
+ "ID": 'qcs::cam::uin/100004603008:uin/100004603008' // 100004603008 是 QQ 号
752
+ },
753
+ "Grants": [{
754
+ "Grantee": {
755
+ "ID": "qcs::cam::uin/100004603008:uin/100004603008", // 100004603008 是 QQ 号
756
+ },
757
+ "Permission": "READ"
758
+ }]
759
+ };
760
+ var AccessControlPolicy2 = {
761
+ "Owner": {
762
+ "ID": 'qcs::cam::uin/100004603008:uin/100004603008' // 100004603008 是 QQ 号
763
+ },
764
+ "Grant": {
765
+ "Grantee": {
766
+ "ID": "qcs::cam::uin/100004603008:uin/100004603008", // 100004603008 是 QQ 号
767
+ },
768
+ "Permission": "READ"
769
+ }
770
+ };
771
+ describe('ObjectAcl', function () {
772
+ this.timeout(60000);
773
+ it('putObjectAcl() header ACL:private', function (done) {
774
+ cos.putObject({
775
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
776
+ Region: config.Region,
777
+ Key: '1.txt',
778
+ Body: Buffer.from('hello!'),
779
+ }, function (err, data) {
780
+ assert.ok(!err);
781
+ cos.putObjectAcl({
782
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
783
+ Region: config.Region,
784
+ ACL: 'private',
785
+ Key: '1.txt',
786
+ }, function (err, data) {
787
+ assert.ok(!err, 'putObjectAcl 成功');
788
+ cos.getObjectAcl({
789
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
790
+ Region: config.Region,
791
+ Key: '1.txt'
792
+ }, function (err, data) {
793
+ assert.ok(data.ACL = 'private');
794
+ AccessControlPolicy.Owner.ID = data.Owner.ID;
795
+ AccessControlPolicy2.Owner.ID = data.Owner.ID;
796
+ assert.ok(data.Grants.length === 1);
797
+ done();
798
+ });
799
+ });
800
+ });
801
+ });
802
+ it('putObjectAcl() header ACL:default', function (done) {
803
+ cos.putObjectAcl({
804
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
805
+ Region: config.Region,
806
+ ACL: 'default',
807
+ Key: '1.txt',
808
+ }, function (err, data) {
809
+ assert.ok(!err, 'putObjectAcl 成功');
810
+ cos.getObjectAcl({
811
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
812
+ Region: config.Region,
813
+ Key: '1.txt'
814
+ }, function (err, data) {
815
+ assert.ok(data.ACL = 'default');
816
+ done();
817
+ });
818
+ });
819
+ });
820
+ it('putObjectAcl() header ACL:public-read', function (done) {
821
+ cos.putObjectAcl({
822
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
823
+ Region: config.Region,
824
+ ACL: 'public-read',
825
+ Key: '1.txt',
826
+ }, function (err, data) {
827
+ assert.ok(!err, 'putObjectAcl 成功');
828
+ cos.getObjectAcl({Bucket: config.Bucket, Region: config.Region, Key: '1.txt'}, function (err, data) { // Bucket 格式:test-1250000000
829
+ assert.ok(data.ACL = 'public-read');
830
+ done();
831
+ });
832
+ });
833
+ });
834
+ it('putObjectAcl() header ACL:public-read-write', function (done) {
835
+ cos.putObjectAcl({
836
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
837
+ Region: config.Region,
838
+ ACL: 'public-read-write',
839
+ Key: '1.txt',
840
+ }, function (err, data) {
841
+ assert.ok(!err, 'putObjectAcl 成功');
842
+ cos.getObjectAcl({Bucket: config.Bucket, Region: config.Region, Key: '1.txt'}, function (err, data) { // Bucket 格式:test-1250000000
843
+ assert.ok(data.ACL = 'public-read-write');
844
+ done();
845
+ });
846
+ });
847
+ });
848
+ it('putObjectAcl() header GrantRead:1001,1002', function (done) {
849
+ var GrantRead = 'id="qcs::cam::uin/1001:uin/1001",id="qcs::cam::uin/1002:uin/1002"';
850
+ cos.putObjectAcl({
851
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
852
+ Region: config.Region,
853
+ GrantRead: GrantRead,
854
+ Key: '1.txt',
855
+ }, function (err, data) {
856
+ assert.ok(!err, 'putObjectAcl 成功');
857
+ cos.getObjectAcl({Bucket: config.Bucket, Region: config.Region, Key: '1.txt'}, function (err, data) { // Bucket 格式:test-1250000000
858
+ assert.ok(data.GrantRead = GrantRead);
859
+ done();
860
+ });
861
+ });
862
+ });
863
+ it('putObjectAcl() header GrantWrite:1001,1002', function (done) {
864
+ var GrantWrite = 'id="qcs::cam::uin/1001:uin/1001", id="qcs::cam::uin/1002:uin/1002"';
865
+ cos.putObjectAcl({
866
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
867
+ Region: config.Region,
868
+ GrantWrite: GrantWrite,
869
+ Key: '1.txt',
870
+ }, function (err, data) {
871
+ assert.ok(!err, 'putObjectAcl 成功');
872
+ cos.getObjectAcl({Bucket: config.Bucket, Region: config.Region, Key: '1.txt'}, function (err, data) { // Bucket 格式:test-1250000000
873
+ assert.ok(data.GrantWrite = GrantWrite);
874
+ done();
875
+ });
876
+ });
877
+ });
878
+ it('putObjectAcl() header GrantFullControl:1001,1002', function (done) {
879
+ var GrantFullControl = 'id="qcs::cam::uin/1001:uin/1001", id="qcs::cam::uin/1002:uin/1002"';
880
+ cos.putObjectAcl({
881
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
882
+ Region: config.Region,
883
+ GrantFullControl: GrantFullControl,
884
+ Key: '1.txt',
885
+ }, function (err, data) {
886
+ assert.ok(!err, 'putObjectAcl 成功');
887
+ cos.getObjectAcl({Bucket: config.Bucket, Region: config.Region, Key: '1.txt'}, function (err, data) { // Bucket 格式:test-1250000000
888
+ assert.ok(data.GrantFullControl = GrantFullControl);
889
+ done();
890
+ });
891
+ });
892
+ });
893
+ it('putObjectAcl() header ACL:public-read, GrantRead:1001,1002', function (done) {
894
+ var GrantFullControl = 'id="qcs::cam::uin/1001:uin/1001", id="qcs::cam::uin/1002:uin/1002"';
895
+ cos.putObjectAcl({
896
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
897
+ Region: config.Region,
898
+ GrantFullControl: GrantFullControl,
899
+ ACL: 'public-read',
900
+ Key: '1.txt',
901
+ }, function (err, data) {
902
+ assert.ok(!err, 'putObjectAcl 成功');
903
+ cos.getObjectAcl({Bucket: config.Bucket, Region: config.Region, Key: '1.txt'}, function (err, data) { // Bucket 格式:test-1250000000
904
+ assert.ok(data.GrantFullControl = GrantFullControl);
905
+ assert.ok(data.ACL = 'public-read');
906
+ done();
907
+ });
908
+ });
909
+ });
910
+ it('putObjectAcl() xml', function (done) {
911
+ cos.putObjectAcl({
912
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
913
+ Region: config.Region,
914
+ AccessControlPolicy: AccessControlPolicy,
915
+ Key: '1.txt',
916
+ }, function (err, data) {
917
+ assert.ok(!err, 'putObjectAcl 成功');
918
+ cos.getBucketAcl({Bucket: config.Bucket, Region: config.Region, Key: '1.txt'}, function (err, data) { // Bucket 格式:test-1250000000
919
+ assert.ok(data.Grants.length === 1);
920
+ assert.ok(data.Grants[0] && data.Grants[0].Grantee.ID === 'qcs::cam::uin/100004603008:uin/100004603008', '设置 AccessControlPolicy ID 正确');
921
+ assert.ok(data.Grants[0] && data.Grants[0].Permission === 'READ', '设置 AccessControlPolicy Permission 正确');
922
+ done();
923
+ });
924
+ });
925
+ });
926
+ it('putObjectAcl() xml2', function (done) {
927
+ cos.putObjectAcl({
928
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
929
+ Region: config.Region,
930
+ AccessControlPolicy: AccessControlPolicy2,
931
+ Key: '1.txt',
932
+ }, function (err, data) {
933
+ assert.ok(!err, 'putObjectAcl 成功');
934
+ cos.getObjectAcl({
935
+ Bucket: config.Bucket,
936
+ Region: config.Region,
937
+ Key: '1.txt'
938
+ }, function (err, data) { // Bucket 格式:test-1250000000
939
+ assert.ok(data.Grants.length === 1);
940
+ assert.ok(data.Grants[0] && data.Grants[0].Grantee.ID === 'qcs::cam::uin/100004603008:uin/100004603008', 'ID 正确');
941
+ assert.ok(data.Grants[0] && data.Grants[0].Permission === 'READ', 'Permission 正确');
942
+ done();
943
+ });
944
+ });
945
+ });
946
+ it('putObjectAcl() decodeAcl', function (done) {
947
+ cos.getObjectAcl({
948
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
949
+ Region: config.Region,
950
+ Key: '1.txt'
951
+ }, function (err, data) {
952
+ cos.putObjectAcl({
953
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
954
+ Region: config.Region,
955
+ Key: '1.txt',
956
+ GrantFullControl: data.GrantFullControl,
957
+ GrantWrite: data.GrantWrite,
958
+ GrantRead: data.GrantRead,
959
+ ACL: data.ACL,
960
+ }, function (err, data) {
961
+ assert.ok(data);
962
+ done();
963
+ });
964
+ });
965
+ });
966
+ });
967
+ })();
968
+
969
+ describe('BucketCors', function () {
970
+ this.timeout(60000);
971
+ var CORSRules = [{
972
+ "AllowedOrigins": ["*"],
973
+ "AllowedMethods": ["GET", "POST", "PUT", "DELETE", "HEAD"],
974
+ "AllowedHeaders": ["*"],
975
+ "ExposeHeaders": ["ETag", "Content-Length", "x-cos-acl", "x-cos-version-id", "x-cos-request-id", "x-cos-delete-marker", "x-cos-server-side-encryption"],
976
+ "MaxAgeSeconds": "5"
977
+ }];
978
+ var CORSRulesMulti = [{
979
+ "AllowedOrigins": ["*"],
980
+ "AllowedMethods": ["GET", "POST", "PUT", "DELETE", "HEAD"],
981
+ "AllowedHeaders": ["*"],
982
+ "ExposeHeaders": ["ETag", "Content-Length", "x-cos-acl", "x-cos-version-id", "x-cos-request-id", "x-cos-delete-marker", "x-cos-server-side-encryption"],
983
+ "MaxAgeSeconds": "5"
984
+ }, {
985
+ "AllowedOrigins": ["http://qq.com", "http://qcloud.com"],
986
+ "AllowedMethods": ["GET", "POST", "PUT", "DELETE", "HEAD"],
987
+ "AllowedHeaders": ["*"],
988
+ "ExposeHeaders": ["ETag", "Content-Length", "x-cos-acl", "x-cos-version-id", "x-cos-request-id", "x-cos-delete-marker", "x-cos-server-side-encryption"],
989
+ "MaxAgeSeconds": "5"
990
+ }];
991
+ it('deleteBucketCors()', function (done) {
992
+ cos.deleteBucketCors({
993
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
994
+ Region: config.Region
995
+ }, function (err, data) {
996
+ assert.ok(!err);
997
+ setTimeout(function () {
998
+ cos.getBucketCors({
999
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
1000
+ Region: config.Region
1001
+ }, function (err, data) {
1002
+ assert.ok(err && err.statusCode === 404);
1003
+ done();
1004
+ });
1005
+ }, 2000);
1006
+ });
1007
+ });
1008
+ it('putBucketCors(),getBucketCors()', function (done) {
1009
+ CORSRules[0].AllowedHeaders[CORSRules[0].AllowedHeaders.length - 1] =
1010
+ 'test-' + Date.now().toString(36);
1011
+ cos.putBucketCors({
1012
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
1013
+ Region: config.Region,
1014
+ CORSConfiguration: {
1015
+ CORSRules: CORSRules
1016
+ }
1017
+ }, function (err, data) {
1018
+ assert.ok(!err);
1019
+ setTimeout(function () {
1020
+ cos.getBucketCors({
1021
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
1022
+ Region: config.Region
1023
+ }, function (err, data) {
1024
+ assert.ok(comparePlainObject(CORSRules, data.CORSRules));
1025
+ done();
1026
+ });
1027
+ }, 2000);
1028
+ });
1029
+ });
1030
+ it('putBucketCors() old', function (done) {
1031
+ var testVal = 'test-' + Date.now().toString(36);
1032
+ CORSRules[0].AllowedHeaders.push(testVal);
1033
+ cos.putBucketCors({
1034
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
1035
+ Region: config.Region,
1036
+ CORSConfiguration: {
1037
+ CORSRules: CORSRules
1038
+ }
1039
+ }, function (err, data) {
1040
+ assert.ok(!err);
1041
+ setTimeout(function () {
1042
+ cos.getBucketCors({
1043
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
1044
+ Region: config.Region
1045
+ }, function (err, data) {
1046
+ assert.ok(comparePlainObject(CORSRules, data.CORSRules));
1047
+ done();
1048
+ });
1049
+ }, 2000);
1050
+ });
1051
+ });
1052
+ it('putBucketCors() old', function (done) {
1053
+ CORSRules[0].AllowedHeaders[CORSRules[0].AllowedHeaders.length - 1] =
1054
+ 'test-' + Date.now().toString(36);
1055
+ cos.putBucketCors({
1056
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
1057
+ Region: config.Region,
1058
+ CORSRules: CORSRules
1059
+ }, function (err, data) {
1060
+ assert.ok(!err);
1061
+ setTimeout(function () {
1062
+ cos.getBucketCors({
1063
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
1064
+ Region: config.Region
1065
+ }, function (err, data) {
1066
+ assert.ok(comparePlainObject(CORSRules, data.CORSRules));
1067
+ done();
1068
+ });
1069
+ }, 2000);
1070
+ });
1071
+ });
1072
+ it('putBucketCors() multi', function (done) {
1073
+ cos.putBucketCors({
1074
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
1075
+ Region: config.Region,
1076
+ CORSConfiguration: {
1077
+ CORSRules: CORSRulesMulti
1078
+ }
1079
+ }, function (err, data) {
1080
+ assert.ok(!err);
1081
+ setTimeout(function () {
1082
+ cos.getBucketCors({
1083
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
1084
+ Region: config.Region
1085
+ }, function (err, data) {
1086
+ assert.ok(comparePlainObject(CORSRulesMulti, data.CORSRules));
1087
+ done();
1088
+ });
1089
+ }, 2000);
1090
+ });
1091
+ });
1092
+ });
1093
+
1094
+ (function () {
1095
+ var Rules = [{
1096
+ 'ID': '1',
1097
+ 'Filter': {
1098
+ 'Prefix': 'test_' + Date.now().toString(36),
1099
+ },
1100
+ 'Status': 'Enabled',
1101
+ 'Transition': {
1102
+ 'Date': '2018-07-29T16:00:00.000Z',
1103
+ 'StorageClass': 'STANDARD_IA'
1104
+ }
1105
+ }];
1106
+ var RulesMulti = [{
1107
+ 'ID': '1',
1108
+ 'Filter': {
1109
+ 'Prefix': 'test1_' + Date.now().toString(36),
1110
+ },
1111
+ 'Status': 'Enabled',
1112
+ 'Transition': {
1113
+ 'Date': '2018-07-29T16:00:00.000Z',
1114
+ 'StorageClass': 'STANDARD_IA'
1115
+ }
1116
+ }, {
1117
+ 'ID': '2',
1118
+ 'Filter': {
1119
+ 'Prefix': 'test2_' + Date.now().toString(36),
1120
+ },
1121
+ 'Status': 'Enabled',
1122
+ 'Transition': {
1123
+ 'Date': '2018-07-29T16:00:00.000Z',
1124
+ 'StorageClass': 'STANDARD_IA'
1125
+ }
1126
+ }];
1127
+ describe('BucketLifecycle', function () {
1128
+ this.timeout(60000);
1129
+ it('deleteBucketLifecycle()', function (done) {
1130
+ cos.deleteBucketLifecycle({
1131
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
1132
+ Region: config.Region
1133
+ }, function (err, data) {
1134
+ assert.ok(!err);
1135
+ setTimeout(function () {
1136
+ cos.getBucketLifecycle({
1137
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
1138
+ Region: config.Region
1139
+ }, function (err, data) {
1140
+ assert.ok(comparePlainObject([], data.Rules));
1141
+ done();
1142
+ });
1143
+ }, 2000);
1144
+ });
1145
+ });
1146
+ it('putBucketLifecycle(),getBucketLifecycle()', function (done) {
1147
+ Rules[0].Filter.Prefix = 'test_' + Date.now().toString(36);
1148
+ cos.putBucketLifecycle({
1149
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
1150
+ Region: config.Region,
1151
+ LifecycleConfiguration: {
1152
+ Rules: Rules
1153
+ }
1154
+ }, function (err, data) {
1155
+ assert.ok(!err);
1156
+ setTimeout(function () {
1157
+ cos.getBucketLifecycle({
1158
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
1159
+ Region: config.Region
1160
+ }, function (err, data) {
1161
+ assert.ok(comparePlainObject(Rules, data && data.Rules));
1162
+ done();
1163
+ });
1164
+ }, 2000);
1165
+ });
1166
+ });
1167
+ it('putBucketLifecycle() multi', function (done) {
1168
+ Rules[0].Filter.Prefix = 'test_' + Date.now().toString(36);
1169
+ cos.putBucketLifecycle({
1170
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
1171
+ Region: config.Region,
1172
+ LifecycleConfiguration: {
1173
+ Rules: RulesMulti
1174
+ }
1175
+ }, function (err, data) {
1176
+ assert.ok(!err);
1177
+ setTimeout(function () {
1178
+ cos.getBucketLifecycle({
1179
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
1180
+ Region: config.Region
1181
+ }, function (err, data) {
1182
+ assert.ok(comparePlainObject(RulesMulti, data.Rules));
1183
+ done();
1184
+ });
1185
+ }, 2000);
1186
+ });
1187
+ });
1188
+ });
1189
+ })();
1190
+
1191
+ describe('params check', function () {
1192
+ it('Region', function (done) {
1193
+ cos.headBucket({
1194
+ Bucket: config.Bucket, // Bucket 格式:test-1250000000
1195
+ Region: 'gz'
1196
+ }, function (err, data) {
1197
+ assert.ok(err);
1198
+ done();
1199
+ });
1200
+ });
1201
+ });
1202
+
1203
+ describe('Key 特殊字符处理', function () {
1204
+ it('Key 特殊字符处理', function (done) {
1205
+ var Key = '中文→↓←→↖↗↙↘! $&\'()+,-.0123456789=@ABCDEFGHIJKLMNOPQRSTUV?WXYZ[]^_`abcdefghijklmnopqrstuvwxyz{}~.jpg';
1206
+ cos.putObject({
1207
+ Bucket: config.Bucket,
1208
+ Region: config.Region,
1209
+ Key: Key,
1210
+ Body: 'hello',
1211
+ }, function (err, data) {
1212
+ assert.ok(!err);
1213
+ cos.deleteObject({
1214
+ Bucket: config.Bucket,
1215
+ Region: config.Region,
1216
+ Key: Key,
1217
+ Body: 'hello',
1218
+ }, function (err, data) {
1219
+ assert.ok(!err);
1220
+ cos.deleteMultipleObject({
1221
+ Bucket: config.Bucket,
1222
+ Region: config.Region,
1223
+ Objects: {
1224
+ Key: Key,
1225
+ },
1226
+ }, function (err, data) {
1227
+ assert.ok(!err);
1228
+ done();
1229
+ });
1230
+ });
1231
+ });
1232
+ });
1233
+ });
1234
+
1235
+ describe('Bucket 格式有误', function () {
1236
+ it('Bucket 带有中文', function (done) {
1237
+ cos.headBucket({
1238
+ Bucket: '中文-1250000000',
1239
+ Region: config.Region,
1240
+ }, function (err, data) {
1241
+ // assert.ok(err && err.error === 'Bucket should format as "test-1250000000".');
1242
+ done();
1243
+ });
1244
+ });
1245
+ it('Bucket 带有 /', function (done) {
1246
+ cos.headBucket({
1247
+ Bucket: 'te/st-1250000000',
1248
+ Region: config.Region,
1249
+ }, function (err, data) {
1250
+ assert.ok(err && err.error === 'Bucket should format as "test-1250000000".');
1251
+ done();
1252
+ });
1253
+ });
1254
+ it('Bucket 带有 .', function (done) {
1255
+ cos.headBucket({
1256
+ Bucket: 'te.st-1250000000',
1257
+ Region: config.Region,
1258
+ }, function (err, data) {
1259
+ assert.ok(err && err.error === 'Bucket should format as "test-1250000000".');
1260
+ done();
1261
+ });
1262
+ });
1263
+ it('Bucket 带有 :', function (done) {
1264
+ cos.headBucket({
1265
+ Bucket: 'te:st-1250000000',
1266
+ Region: config.Region,
1267
+ }, function (err, data) {
1268
+ assert.ok(err && err.error === 'Bucket should format as "test-1250000000".');
1269
+ done();
1270
+ });
1271
+ });
1272
+ });
1273
+
1274
+ describe('Region 格式有误', function () {
1275
+ it('Region 带有中文', function (done) {
1276
+ cos.headBucket({
1277
+ Bucket: 'test-1250000000',
1278
+ Region: '中文',
1279
+ }, function (err, data) {
1280
+ assert.ok(err && err.error === 'Region format error.');
1281
+ done();
1282
+ });
1283
+ });
1284
+ it('Region 带有 /', function (done) {
1285
+ cos.headBucket({
1286
+ Bucket: 'test-1250000000',
1287
+ Region: 'test/',
1288
+ }, function (err, data) {
1289
+ assert.ok(err && err.error === 'Region format error.');
1290
+ done();
1291
+ });
1292
+ });
1293
+ it('Region 带有 :', function (done) {
1294
+ cos.headBucket({
1295
+ Bucket: 'te:st-1250000000',
1296
+ Region: 'test:',
1297
+ }, function (err, data) {
1298
+ assert.ok(err && err.error === 'Region format error.');
1299
+ done();
1300
+ });
1301
+ });
1302
+ });