put_object.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  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 展示了简单上传、断点续传的使用方法
  10. func PutObjectSample() {
  11. // 创建Bucket
  12. bucket, err := GetTestBucket(bucketName)
  13. if err != nil {
  14. HandleError(err)
  15. }
  16. var val = "花间一壶酒,独酌无相亲。 举杯邀明月,对影成三人。"
  17. // 场景1:上传object,value是字符串。
  18. err = bucket.PutObject(objectKey, strings.NewReader(val))
  19. if err != nil {
  20. HandleError(err)
  21. }
  22. // 场景2:上传object,value是[]byte。
  23. err = bucket.PutObject(objectKey, bytes.NewReader([]byte(val)))
  24. if err != nil {
  25. HandleError(err)
  26. }
  27. // 场景3:上传本地文件,用户打开文件,传入句柄。
  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. // 场景4:上传本地文件,不需要打开文件。
  38. err = bucket.PutObjectFromFile(objectKey, localFile)
  39. if err != nil {
  40. HandleError(err)
  41. }
  42. // 场景5:上传object,上传时指定对象属性。PutObject/PutObjectFromFile/UploadFile都支持该功能。
  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. props, err := bucket.GetObjectDetailedMeta(objectKey)
  53. if err != nil {
  54. HandleError(err)
  55. }
  56. fmt.Println("Object Meta:", props)
  57. // 场景6:大文件分片上传,支持并发上传,断点续传功能。
  58. // 分片上传,分片大小为100K。默认使用不使用并发上传,不使用断点续传。
  59. err = bucket.UploadFile(objectKey, localFile, 100*1024)
  60. if err != nil {
  61. HandleError(err)
  62. }
  63. // 分片大小为100K,3个协程并发上传。
  64. err = bucket.UploadFile(objectKey, localFile, 100*1024, oss.Routines(3))
  65. if err != nil {
  66. HandleError(err)
  67. }
  68. // 分片大小为100K,3个协程并发下载,使用断点续传上传文件。
  69. err = bucket.UploadFile(objectKey, localFile, 100*1024, oss.Routines(3), oss.Checkpoint(true, ""))
  70. if err != nil {
  71. HandleError(err)
  72. }
  73. // 断点续传功能需要使用本地文件,记录哪些分片已经上传。该文件路径可以Checkpoint的第二个参数指定,如果为空,则为上传文件目录。
  74. err = bucket.UploadFile(objectKey, localFile, 100*1024, oss.Checkpoint(true, localFile+".cp"))
  75. if err != nil {
  76. HandleError(err)
  77. }
  78. // 删除object和bucket
  79. err = DeleteTestBucketAndObject(bucketName)
  80. if err != nil {
  81. HandleError(err)
  82. }
  83. fmt.Println("PutObjectSample completed")
  84. }