9 "github.com/aliyun/aliyun-oss-go-sdk/oss"
13 func (s *OssCryptoBucketSuite) TestMultipartUpload(c *C) {
14 // create a bucket with default proprety
15 client, err := oss.New(endpoint, accessID, accessKey)
18 bucketName := bucketNamePrefix + RandLowStr(6)
19 err = client.CreateBucket(bucketName)
23 masterRsaCipher, _ := CreateMasterRsa(matDesc, rsaPublicKey, rsaPrivateKey)
24 contentProvider := CreateAesCtrCipher(masterRsaCipher)
25 bucket, err := GetCryptoBucket(client, bucketName, contentProvider)
27 objectName := objectNamePrefix + RandStr(8)
28 fileName := "../../sample/BingWallpaper-2015-11-07.jpg"
30 srcMD5, err := GetFileMD5(fileName)
33 fileInfo, err := os.Stat(fileName)
34 dataSize := fileInfo.Size()
37 options := []oss.Option{oss.Meta("my", "myprop")}
38 var cryptoContext PartCryptoContext
39 cryptoContext.DataSize = dataSize
40 cryptoContext.PartSize = (dataSize / 16 / 3) * 16
41 imur, err := bucket.InitiateMultipartUpload(objectName, &cryptoContext, options...)
44 chunks, err := oss.SplitFileByPartSize(fileName, cryptoContext.PartSize)
47 fd, err := os.Open(fileName)
51 var parts []oss.UploadPart
52 for _, chunk := range chunks {
53 fd.Seek(chunk.Offset, os.SEEK_SET)
54 part, err := bucket.UploadPart(imur, fd, chunk.Size, chunk.Number, cryptoContext)
56 parts = append(parts, part)
59 _, err = bucket.CompleteMultipartUpload(imur, parts)
62 meta, err := bucket.GetObjectDetailedMeta(objectName)
65 c.Assert(meta.Get("X-Oss-Meta-My"), Equals, "myprop")
66 c.Assert(meta.Get("X-Oss-Object-Type"), Equals, "Multipart")
68 downfileName := "test-go-sdk-file-" + RandLowStr(5)
69 err = bucket.GetObjectToFile(objectName, downfileName)
72 downFileMD5, err := GetFileMD5(downfileName)
74 c.Assert(downFileMD5, Equals, srcMD5)
76 os.Remove(downfileName)
77 ForceDeleteBucket(client, bucketName, c)
80 func (s *OssCryptoBucketSuite) TestMultipartUploadFromFile(c *C) {
81 // create a bucket with default proprety
82 client, err := oss.New(endpoint, accessID, accessKey)
85 bucketName := bucketNamePrefix + RandLowStr(6)
86 err = client.CreateBucket(bucketName)
90 masterRsaCipher, _ := CreateMasterRsa(matDesc, rsaPublicKey, rsaPrivateKey)
91 contentProvider := CreateAesCtrCipher(masterRsaCipher)
92 bucket, err := GetCryptoBucket(client, bucketName, contentProvider)
94 objectName := objectNamePrefix + RandStr(8)
95 fileName := "../../sample/BingWallpaper-2015-11-07.jpg"
97 srcMD5, err := GetFileMD5(fileName)
100 fileInfo, err := os.Stat(fileName)
101 dataSize := fileInfo.Size()
104 options := []oss.Option{oss.Meta("my", "myprop")}
105 var cryptoContext PartCryptoContext
106 cryptoContext.DataSize = dataSize
107 cryptoContext.PartSize = (dataSize / 16 / 3) * 16
108 imur, err := bucket.InitiateMultipartUpload(objectName, &cryptoContext, options...)
111 chunks, err := oss.SplitFileByPartSize(fileName, cryptoContext.PartSize)
114 var parts []oss.UploadPart
115 for _, chunk := range chunks {
116 part, err := bucket.UploadPartFromFile(imur, fileName, chunk.Offset, chunk.Size, chunk.Number, cryptoContext)
118 parts = append(parts, part)
121 _, err = bucket.CompleteMultipartUpload(imur, parts)
124 meta, err := bucket.GetObjectDetailedMeta(objectName)
127 c.Assert(meta.Get("X-Oss-Meta-My"), Equals, "myprop")
128 c.Assert(meta.Get("X-Oss-Object-Type"), Equals, "Multipart")
130 downfileName := "test-go-sdk-file-" + RandLowStr(5) + ".jpg"
131 err = bucket.GetObjectToFile(objectName, downfileName)
134 downFileMD5, err := GetFileMD5(downfileName)
136 c.Assert(downFileMD5, Equals, srcMD5)
138 os.Remove(downfileName)
139 ForceDeleteBucket(client, bucketName, c)
142 func (s *OssCryptoBucketSuite) TestMultipartUploadFromSmallSizeFile(c *C) {
143 // create a bucket with default proprety
144 client, err := oss.New(endpoint, accessID, accessKey)
147 bucketName := bucketNamePrefix + RandLowStr(6)
148 err = client.CreateBucket(bucketName)
152 masterRsaCipher, _ := CreateMasterRsa(matDesc, rsaPublicKey, rsaPrivateKey)
153 contentProvider := CreateAesCtrCipher(masterRsaCipher)
154 bucket, err := GetCryptoBucket(client, bucketName, contentProvider)
156 objectName := objectNamePrefix + RandStr(8)
157 fileName := "oss-go-sdk-test-file-" + RandStr(5)
158 fo, err := os.Create(fileName)
160 _, err = fo.Write([]byte("123"))
164 srcMD5, err := GetFileMD5(fileName)
167 fileInfo, err := os.Stat(fileName)
168 dataSize := fileInfo.Size()
171 options := []oss.Option{oss.Meta("my", "myprop")}
172 var cryptoContext PartCryptoContext
173 cryptoContext.DataSize = dataSize
174 cryptoContext.PartSize = 16
175 imur, err := bucket.InitiateMultipartUpload(objectName, &cryptoContext, options...)
178 chunks, err := oss.SplitFileByPartSize(fileName, cryptoContext.PartSize)
181 var parts []oss.UploadPart
182 for _, chunk := range chunks {
183 part, err := bucket.UploadPartFromFile(imur, fileName, chunk.Offset, chunk.Size, chunk.Number, cryptoContext)
185 parts = append(parts, part)
188 _, err = bucket.CompleteMultipartUpload(imur, parts)
191 meta, err := bucket.GetObjectDetailedMeta(objectName)
194 c.Assert(meta.Get("X-Oss-Meta-My"), Equals, "myprop")
195 c.Assert(meta.Get("X-Oss-Object-Type"), Equals, "Multipart")
197 downfileName := "test-go-sdk-file-" + RandLowStr(5) + ".jpg"
198 err = bucket.GetObjectToFile(objectName, downfileName)
201 downFileMD5, err := GetFileMD5(downfileName)
203 c.Assert(downFileMD5, Equals, srcMD5)
206 os.Remove(downfileName)
207 ForceDeleteBucket(client, bucketName, c)
210 func (s *OssCryptoBucketSuite) TestListUploadedPartsNormal(c *C) {
211 // create a bucket with default proprety
212 client, err := oss.New(endpoint, accessID, accessKey)
215 bucketName := bucketNamePrefix + RandLowStr(6)
216 err = client.CreateBucket(bucketName)
220 masterRsaCipher, _ := CreateMasterRsa(matDesc, rsaPublicKey, rsaPrivateKey)
221 contentProvider := CreateAesCtrCipher(masterRsaCipher)
222 bucket, err := GetCryptoBucket(client, bucketName, contentProvider)
224 objectName := objectNamePrefix + RandStr(8)
225 fileName := "../../sample/BingWallpaper-2015-11-07.jpg"
227 srcMD5, err := GetFileMD5(fileName)
230 fileInfo, err := os.Stat(fileName)
231 dataSize := fileInfo.Size()
235 var cryptoContext PartCryptoContext
236 cryptoContext.DataSize = dataSize
237 cryptoContext.PartSize = (dataSize / 16 / 3) * 16
238 imurUpload, err := bucket.InitiateMultipartUpload(objectName, &cryptoContext)
239 chunks, err := oss.SplitFileByPartSize(fileName, cryptoContext.PartSize)
242 var partsUpload []oss.UploadPart
243 for _, chunk := range chunks {
244 part, err := bucket.UploadPartFromFile(imurUpload, fileName, chunk.Offset, chunk.Size, (int)(chunk.Number), cryptoContext)
246 partsUpload = append(partsUpload, part)
250 lupr, err := bucket.ListUploadedParts(imurUpload)
252 c.Assert(len(lupr.UploadedParts), Equals, len(chunks))
255 _, err = bucket.CompleteMultipartUpload(imurUpload, partsUpload)
259 downfileName := "test-go-sdk-file-" + RandLowStr(5) + ".jpg"
260 err = bucket.GetObjectToFile(objectName, downfileName)
262 downFileMD5, err := GetFileMD5(downfileName)
264 c.Assert(downFileMD5, Equals, srcMD5)
266 os.Remove(downfileName)
267 ForceDeleteBucket(client, bucketName, c)
270 func (s *OssCryptoBucketSuite) TestListUploadedPartsComplete(c *C) {
271 // create a bucket with default proprety
272 client, err := oss.New(endpoint, accessID, accessKey)
275 bucketName := bucketNamePrefix + RandLowStr(6)
276 err = client.CreateBucket(bucketName)
280 masterRsaCipher, _ := CreateMasterRsa(matDesc, rsaPublicKey, rsaPrivateKey)
281 contentProvider := CreateAesCtrCipher(masterRsaCipher)
282 bucket, err := GetCryptoBucket(client, bucketName, contentProvider)
284 objectName := objectNamePrefix + RandStr(8)
285 fileName := "../../sample/BingWallpaper-2015-11-07.jpg"
287 srcMD5, err := GetFileMD5(fileName)
290 fileInfo, err := os.Stat(fileName)
291 dataSize := fileInfo.Size()
295 var cryptoContext PartCryptoContext
296 cryptoContext.DataSize = dataSize
297 cryptoContext.PartSize = (dataSize / 16 / 3) * 16
298 imurUpload, err := bucket.InitiateMultipartUpload(objectName, &cryptoContext)
299 chunks, err := oss.SplitFileByPartSize(fileName, cryptoContext.PartSize)
302 var partsUpload []oss.UploadPart
304 // upload excepted the last part
305 for ; i < len(chunks)-1; i++ {
306 part, err := bucket.UploadPartFromFile(imurUpload, fileName, chunks[i].Offset, chunks[i].Size, (int)(chunks[i].Number), cryptoContext)
308 partsUpload = append(partsUpload, part)
312 lupr, err := bucket.ListUploadedParts(imurUpload)
314 c.Assert(len(lupr.UploadedParts), Equals, len(chunks)-1)
316 lmur, err := bucket.ListMultipartUploads()
318 c.Assert(len(lmur.Uploads), Equals, 1)
320 // upload the last part with list part result
321 part, err := bucket.UploadPartFromFile(imurUpload, fileName, chunks[i].Offset, chunks[i].Size, (int)(chunks[i].Number), cryptoContext)
323 partsUpload = append(partsUpload, part)
326 _, err = bucket.CompleteMultipartUpload(imurUpload, partsUpload)
330 downfileName := "test-go-sdk-file-" + RandLowStr(5) + ".jpg"
331 err = bucket.GetObjectToFile(objectName, downfileName)
333 downFileMD5, err := GetFileMD5(downfileName)
335 c.Assert(downFileMD5, Equals, srcMD5)
337 os.Remove(downfileName)
338 ForceDeleteBucket(client, bucketName, c)
341 func (s *OssCryptoBucketSuite) TestListUploadedPartsAbortUseInit(c *C) {
342 // create a bucket with default proprety
343 client, err := oss.New(endpoint, accessID, accessKey)
346 bucketName := bucketNamePrefix + RandLowStr(6)
347 err = client.CreateBucket(bucketName)
351 masterRsaCipher, _ := CreateMasterRsa(matDesc, rsaPublicKey, rsaPrivateKey)
352 contentProvider := CreateAesCtrCipher(masterRsaCipher)
353 bucket, err := GetCryptoBucket(client, bucketName, contentProvider)
355 objectName := objectNamePrefix + RandStr(8)
356 fileName := "../../sample/BingWallpaper-2015-11-07.jpg"
358 fileInfo, err := os.Stat(fileName)
359 dataSize := fileInfo.Size()
363 var cryptoContext PartCryptoContext
364 cryptoContext.DataSize = dataSize
365 cryptoContext.PartSize = (dataSize / 16 / 3) * 16
366 imurUpload, err := bucket.InitiateMultipartUpload(objectName, &cryptoContext)
367 chunks, err := oss.SplitFileByPartSize(fileName, cryptoContext.PartSize)
369 c.Assert(cryptoContext.Valid(), Equals, true)
371 var partsUpload []oss.UploadPart
373 // upload excepted the last part
374 for ; i < len(chunks)-1; i++ {
375 part, err := bucket.UploadPartFromFile(imurUpload, fileName, chunks[i].Offset, chunks[i].Size, (int)(chunks[i].Number), cryptoContext)
377 partsUpload = append(partsUpload, part)
381 lupr, err := bucket.ListUploadedParts(imurUpload)
383 c.Assert(len(lupr.UploadedParts), Equals, len(chunks)-1)
385 lmur, err := bucket.ListMultipartUploads()
387 c.Assert(len(lmur.Uploads), Equals, 1)
390 err = bucket.AbortMultipartUpload(imurUpload)
394 lupr, err = bucket.ListUploadedParts(imurUpload)
395 c.Assert(err, NotNil)
397 ForceDeleteBucket(client, bucketName, c)
400 func (s *OssCryptoBucketSuite) TestListUploadedPartsAbortUseList(c *C) {
401 // create a bucket with default proprety
402 client, err := oss.New(endpoint, accessID, accessKey)
405 bucketName := bucketNamePrefix + RandLowStr(6)
406 err = client.CreateBucket(bucketName)
410 masterRsaCipher, _ := CreateMasterRsa(matDesc, rsaPublicKey, rsaPrivateKey)
411 contentProvider := CreateAesCtrCipher(masterRsaCipher)
412 bucket, err := GetCryptoBucket(client, bucketName, contentProvider)
414 objectName := objectNamePrefix + RandStr(8)
415 fileName := "../../sample/BingWallpaper-2015-11-07.jpg"
417 fileInfo, err := os.Stat(fileName)
418 dataSize := fileInfo.Size()
422 var cryptoContext PartCryptoContext
423 cryptoContext.DataSize = dataSize
424 cryptoContext.PartSize = (dataSize / 16 / 3) * 16
425 imurUpload, err := bucket.InitiateMultipartUpload(objectName, &cryptoContext)
426 chunks, err := oss.SplitFileByPartSize(fileName, cryptoContext.PartSize)
429 var partsUpload []oss.UploadPart
431 // upload excepted the last part
432 for ; i < len(chunks)-1; i++ {
433 part, err := bucket.UploadPartFromFile(imurUpload, fileName, chunks[i].Offset, chunks[i].Size, (int)(chunks[i].Number), cryptoContext)
435 partsUpload = append(partsUpload, part)
439 lupr, err := bucket.ListUploadedParts(imurUpload)
441 c.Assert(len(lupr.UploadedParts), Equals, len(chunks)-1)
444 err = bucket.AbortMultipartUpload(imurUpload)
448 lupr, err = bucket.ListUploadedParts(imurUpload)
449 c.Assert(err, NotNil)
451 ForceDeleteBucket(client, bucketName, c)
454 func (s *OssCryptoBucketSuite) TestInitiateMultipartUpload(c *C) {
455 // create a bucket with default proprety
456 client, err := oss.New(endpoint, accessID, accessKey)
459 bucketName := bucketNamePrefix + RandLowStr(6)
460 err = client.CreateBucket(bucketName)
464 masterRsaCipher, _ := CreateMasterRsa(matDesc, rsaPublicKey, rsaPrivateKey)
465 contentProvider := CreateAesCtrCipher(masterRsaCipher)
466 bucket, err := GetCryptoBucket(client, bucketName, contentProvider)
468 objectName := objectNamePrefix + RandStr(8)
469 context := RandStr(ivSize * 1024 * 10)
470 fileName := "test-go-sdk-file-" + RandStr(5)
472 err = ioutil.WriteFile(fileName, []byte(context), 0666)
475 fileInfo, err := os.Stat(fileName)
476 dataSize := fileInfo.Size()
479 var cryptoContext PartCryptoContext
480 cryptoContext.DataSize = dataSize
481 cryptoContext.PartSize = ivSize * 1024
482 imurUpload, err := bucket.InitiateMultipartUpload(objectName, &cryptoContext)
485 err = bucket.AbortMultipartUpload(imurUpload)
488 cryptoContext.DataSize = dataSize
489 cryptoContext.PartSize = ivSize / 2
490 imurUpload, err = bucket.InitiateMultipartUpload(objectName, &cryptoContext)
491 c.Assert(err, NotNil)
495 ForceDeleteBucket(client, bucketName, c)
498 func (s *OssCryptoBucketSuite) TestUploadPartError(c *C) {
499 // create a bucket with default proprety
500 client, err := oss.New(endpoint, accessID, accessKey)
503 bucketName := bucketNamePrefix + RandLowStr(6)
504 err = client.CreateBucket(bucketName)
508 masterRsaCipher, _ := CreateMasterRsa(matDesc, rsaPublicKey, rsaPrivateKey)
509 contentProvider := CreateAesCtrCipher(masterRsaCipher)
510 bucket, err := GetCryptoBucket(client, bucketName, contentProvider)
512 objectName := objectNamePrefix + RandStr(8)
513 context := RandStr(ivSize * 1024 * 10)
514 fileName := "test-go-sdk-file-" + RandStr(5)
516 err = ioutil.WriteFile(fileName, []byte(context), 0666)
519 fileInfo, err := os.Stat(fileName)
520 dataSize := fileInfo.Size()
523 var cryptoContext PartCryptoContext
524 cryptoContext.DataSize = dataSize
525 cryptoContext.PartSize = ivSize * 1024
526 imur, err := bucket.InitiateMultipartUpload(objectName, &cryptoContext)
529 chunks, err := oss.SplitFileByPartSize(fileName, cryptoContext.PartSize)
532 fd, err := os.Open(fileName)
534 for _, chunk := range chunks {
535 fd.Seek(chunk.Offset, os.SEEK_SET)
536 _, err := bucket.UploadPart(imur, fd, chunk.Size+1, chunk.Number, cryptoContext)
537 c.Assert(err, NotNil)
540 for _, chunk := range chunks {
541 fd.Seek(chunk.Offset, os.SEEK_SET)
542 _, err := bucket.UploadPart(imur, fd, chunk.Size, 0, cryptoContext)
543 c.Assert(err, NotNil)
547 err = bucket.AbortMultipartUpload(imur)
550 ForceDeleteBucket(client, bucketName, c)
553 func (s *OssCryptoBucketSuite) TestUploadPartFromFileError(c *C) {
554 // create a bucket with default proprety
555 client, err := oss.New(endpoint, accessID, accessKey)
558 bucketName := bucketNamePrefix + RandLowStr(6)
559 err = client.CreateBucket(bucketName)
563 masterRsaCipher, _ := CreateMasterRsa(matDesc, rsaPublicKey, rsaPrivateKey)
564 contentProvider := CreateAesCtrCipher(masterRsaCipher)
565 bucket, err := GetCryptoBucket(client, bucketName, contentProvider)
567 objectName := objectNamePrefix + RandStr(8)
568 context := RandStr(ivSize * 1024 * 10)
569 fileName := "test-go-sdk-file-" + RandStr(5)
571 err = ioutil.WriteFile(fileName, []byte(context), 0666)
574 fileInfo, err := os.Stat(fileName)
575 dataSize := fileInfo.Size()
578 var cryptoContext PartCryptoContext
579 cryptoContext.DataSize = dataSize
580 cryptoContext.PartSize = ivSize * 1024
581 imur, err := bucket.InitiateMultipartUpload(objectName, &cryptoContext)
584 chunks, err := oss.SplitFileByPartSize(fileName, cryptoContext.PartSize)
587 for _, chunk := range chunks {
588 _, err := bucket.UploadPartFromFile(imur, fileName+".test", chunk.Offset, chunk.Size, chunk.Number, cryptoContext)
589 c.Assert(err, NotNil)
592 _, err = bucket.UploadPartFromFile(imur, fileName+".test", chunks[0].Offset, chunks[0].Size+1, chunks[0].Number, cryptoContext)
593 c.Assert(err, NotNil)
595 _, err = bucket.UploadPartFromFile(imur, fileName+".test", chunks[0].Offset, chunks[0].Size, 0, cryptoContext)
596 c.Assert(err, NotNil)
598 err = bucket.AbortMultipartUpload(imur)
601 ForceDeleteBucket(client, bucketName, c)
604 func (s *OssCryptoBucketSuite) TestUploadPartCopyError(c *C) {
605 // create a bucket with default proprety
606 client, err := oss.New(endpoint, accessID, accessKey)
609 bucketName := bucketNamePrefix + RandLowStr(6)
610 err = client.CreateBucket(bucketName)
614 masterRsaCipher, _ := CreateMasterRsa(matDesc, rsaPublicKey, rsaPrivateKey)
615 contentProvider := CreateAesCtrCipher(masterRsaCipher)
616 bucket, err := GetCryptoBucket(client, bucketName, contentProvider)
618 objectName := objectNamePrefix + RandStr(8)
619 context := RandStr(ivSize * 1024 * 10)
620 fileName := "test-go-sdk-file-" + RandStr(5)
622 err = ioutil.WriteFile(fileName, []byte(context), 0666)
625 fileInfo, err := os.Stat(fileName)
626 dataSize := fileInfo.Size()
629 var cryptoContext PartCryptoContext
630 cryptoContext.DataSize = dataSize
631 cryptoContext.PartSize = ivSize * 1024
632 imur, err := bucket.InitiateMultipartUpload(objectName, &cryptoContext)
635 chunks, err := oss.SplitFileByPartSize(fileName, cryptoContext.PartSize)
638 _, err = bucket.UploadPartCopy(imur, bucketName, objectName, 0, chunks[0].Size, 1, cryptoContext)
639 c.Assert(err, NotNil)
641 err = bucket.AbortMultipartUpload(imur)
644 ForceDeleteBucket(client, bucketName, c)
647 func (s *OssCryptoBucketSuite) TestMultipartUploadFromFileError(c *C) {
648 // create a bucket with default proprety
649 client, err := oss.New(endpoint, accessID, accessKey)
652 bucketName := bucketNamePrefix + RandLowStr(6)
653 err = client.CreateBucket(bucketName)
657 masterRsaCipher, _ := CreateMasterRsa(matDesc, rsaPublicKey, rsaPrivateKey)
658 contentProvider := CreateAesCtrCipher(masterRsaCipher)
659 bucket, err := GetCryptoBucket(client, bucketName, contentProvider)
661 objectName := objectNamePrefix + RandStr(8)
662 fileName := "../../sample/BingWallpaper-2015-11-07.jpg"
664 fileInfo, err := os.Stat(fileName)
665 dataSize := fileInfo.Size()
668 options := []oss.Option{oss.Meta("my", "myprop")}
669 var cryptoContext PartCryptoContext
670 cryptoContext.DataSize = dataSize
671 cryptoContext.PartSize = -1
672 _, err = bucket.InitiateMultipartUpload(objectName, nil, options...)
673 c.Assert(err, NotNil)
675 _, err = bucket.InitiateMultipartUpload(objectName, &cryptoContext, options...)
676 c.Assert(err, NotNil)
678 cryptoContext.PartSize = (dataSize / 16 / 3) * 16
679 imur, err := bucket.InitiateMultipartUpload(objectName, &cryptoContext, options...)
682 chunks, err := oss.SplitFileByPartSize(fileName, cryptoContext.PartSize)
685 bakCC := cryptoContext.ContentCipher
686 cryptoContext.ContentCipher = nil
689 // upload excepted the last part
690 for ; i < len(chunks); i++ {
691 _, err = bucket.UploadPartFromFile(imur, fileName, chunks[i].Offset, chunks[i].Size, (int)(chunks[i].Number), cryptoContext)
692 c.Assert(err, NotNil)
697 cryptoContext.ContentCipher = bakCC
698 cryptoContext.PartSize -= 1
699 for ; i < len(chunks); i++ {
700 _, err = bucket.UploadPartFromFile(imur, fileName, chunks[i].Offset, chunks[i].Size, (int)(chunks[i].Number), cryptoContext)
701 c.Assert(err, NotNil)
704 ForceDeleteBucket(client, bucketName, c)
707 func (s *OssCryptoBucketSuite) TestMultipartUploadPartError(c *C) {
708 // create a bucket with default proprety
709 client, err := oss.New(endpoint, accessID, accessKey)
712 bucketName := bucketNamePrefix + RandLowStr(6)
713 err = client.CreateBucket(bucketName)
717 masterRsaCipher, _ := CreateMasterRsa(matDesc, rsaPublicKey, rsaPrivateKey)
718 contentProvider := CreateAesCtrCipher(masterRsaCipher)
719 bucket, err := GetCryptoBucket(client, bucketName, contentProvider)
721 objectName := objectNamePrefix + RandStr(8)
722 fileName := "../../sample/BingWallpaper-2015-11-07.jpg"
724 fileInfo, err := os.Stat(fileName)
725 dataSize := fileInfo.Size()
728 options := []oss.Option{oss.Meta("my", "myprop")}
729 var cryptoContext PartCryptoContext
730 cryptoContext.DataSize = dataSize
731 cryptoContext.PartSize = (dataSize / 16 / 3) * 16
732 imur, err := bucket.InitiateMultipartUpload(objectName, &cryptoContext, options...)
735 chunks, err := oss.SplitFileByPartSize(fileName, cryptoContext.PartSize)
738 bakCC := cryptoContext.ContentCipher
739 cryptoContext.ContentCipher = nil
741 fd, err := os.Open(fileName)
744 for _, chunk := range chunks {
745 fd.Seek(chunk.Offset, os.SEEK_SET)
746 _, err = bucket.UploadPart(imur, fd, chunk.Size, chunk.Number, cryptoContext)
747 c.Assert(err, NotNil)
750 cryptoContext.ContentCipher = bakCC
751 cryptoContext.PartSize -= 1
752 for _, chunk := range chunks {
753 _, err = bucket.UploadPart(imur, fd, chunk.Size, chunk.Number, cryptoContext)
754 c.Assert(err, NotNil)
757 ForceDeleteBucket(client, bucketName, c)