put_object.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. package sample
  2. import (
  3. "bytes"
  4. "fmt"
  5. "os"
  6. "strings"
  7. "github.com/aliyun/aliyun-oss-go-sdk/oss"
  8. )
  9. // PutObjectSample illustrates two methods for uploading a file: simple upload and multipart upload.
  10. func PutObjectSample() {
  11. // Create bucket
  12. bucket, err := GetTestBucket(bucketName)
  13. if err != nil {
  14. HandleError(err)
  15. }
  16. var val = "花间一壶酒,独酌无相亲。 举杯邀明月,对影成三人。"
  17. // Case 1: Upload an object from a string
  18. err = bucket.PutObject(objectKey, strings.NewReader(val))
  19. if err != nil {
  20. HandleError(err)
  21. }
  22. // Case 2: Upload an object whose value is a byte[]
  23. err = bucket.PutObject(objectKey, bytes.NewReader([]byte(val)))
  24. if err != nil {
  25. HandleError(err)
  26. }
  27. // Case 3: Upload the local file with file handle, user should open the file at first.
  28. fd, err := os.Open(localFile)
  29. if err != nil {
  30. HandleError(err)
  31. }
  32. defer fd.Close()
  33. err = bucket.PutObject(objectKey, fd)
  34. if err != nil {
  35. HandleError(err)
  36. }
  37. // Case 4: Upload an object with local file name, user need not open the file.
  38. err = bucket.PutObjectFromFile(objectKey, localFile)
  39. if err != nil {
  40. HandleError(err)
  41. }
  42. // Case 5: Upload an object with specified properties, PutObject/PutObjectFromFile/UploadFile also support this feature.
  43. options := []oss.Option{
  44. oss.Expires(futureDate),
  45. oss.ObjectACL(oss.ACLPublicRead),
  46. oss.Meta("myprop", "mypropval"),
  47. }
  48. err = bucket.PutObject(objectKey, strings.NewReader(val), options...)
  49. if err != nil {
  50. HandleError(err)
  51. }
  52. err = bucket.PutObject(objectKey, strings.NewReader(val), oss.ServerSideEncryption("KMS"), oss.ServerSideEncryptionKeyID(kmsID))
  53. if err != nil {
  54. HandleError(err)
  55. }
  56. props, err := bucket.GetObjectDetailedMeta(objectKey)
  57. if err != nil {
  58. HandleError(err)
  59. }
  60. fmt.Println("Object Meta:", props)
  61. // Case 6: Big file's multipart upload. It supports concurrent upload with resumable upload.
  62. // multipart upload with 100K as part size. By default 1 coroutine is used and no checkpoint is used.
  63. err = bucket.UploadFile(objectKey, localFile, 100*1024)
  64. if err != nil {
  65. HandleError(err)
  66. }
  67. // Part size is 100K and 3 coroutines are used
  68. err = bucket.UploadFile(objectKey, localFile, 100*1024, oss.Routines(3))
  69. if err != nil {
  70. HandleError(err)
  71. }
  72. // Part size is 100K and 3 coroutines with checkpoint
  73. err = bucket.UploadFile(objectKey, localFile, 100*1024, oss.Routines(3), oss.Checkpoint(true, ""))
  74. if err != nil {
  75. HandleError(err)
  76. }
  77. // Specify the local file path for checkpoint files.
  78. // the 2nd parameter of Checkpoint can specify the file path, when the file path is empty, it will upload the directory.
  79. err = bucket.UploadFile(objectKey, localFile, 100*1024, oss.Checkpoint(true, localFile+".cp"))
  80. if err != nil {
  81. HandleError(err)
  82. }
  83. // Delete object and bucket
  84. err = DeleteTestBucketAndObject(bucketName)
  85. if err != nil {
  86. HandleError(err)
  87. }
  88. fmt.Println("PutObjectSample completed")
  89. }