进度条用于指示上传或下载的进度。

    下面的代码以Bucket.PutObjectFromFile方法为例,介绍如何使用进度条。

    1. package main
    2. import (
    3. "fmt"
    4. "os"
    5. "github.com/aliyun/aliyun-oss-go-sdk/oss"
    6. )
    7. // 定义进度条监听器。
    8. type OssProgressListener struct {
    9. }
    10. // 定义进度变更事件处理函数。
    11. func (listener *OssProgressListener) ProgressChanged(event *oss.ProgressEvent) {
    12. switch event.EventType {
    13. case oss.TransferStartedEvent:
    14. fmt.Printf("Transfer Started, ConsumedBytes: %d, TotalBytes %d.\n",
    15. event.ConsumedBytes, event.TotalBytes)
    16. case oss.TransferDataEvent:
    17. fmt.Printf("\rTransfer Data, ConsumedBytes: %d, TotalBytes %d, %d%%.",
    18. event.ConsumedBytes, event.TotalBytes, event.ConsumedBytes*100/event.TotalBytes)
    19. case oss.TransferCompletedEvent:
    20. fmt.Printf("\nTransfer Completed, ConsumedBytes: %d, TotalBytes %d.\n",
    21. event.ConsumedBytes, event.TotalBytes)
    22. case oss.TransferFailedEvent:
    23. fmt.Printf("\nTransfer Failed, ConsumedBytes: %d, TotalBytes %d.\n",
    24. event.ConsumedBytes, event.TotalBytes)
    25. default:
    26. }
    27. }
    28. func main() {
    29. // 创建OSSClient实例。
    30. client, err := oss.New("<yourEndpoint>", "<yourAccessKeyId>", "<yourAccessKeySecret>")
    31. if err != nil {
    32. fmt.Println("Error:", err)
    33. os.Exit(-1)
    34. }
    35. bucketName := "<yourBucketName>"
    36. objectName := "<yourObjectName>"
    37. localFile := "<yourLocalFile>"
    38. // 获取存储空间。
    39. bucket, err := client.Bucket(bucketName)
    40. if err != nil {
    41. fmt.Println("Error:", err)
    42. os.Exit(-1)
    43. }
    44. // 带进度条的上传。
    45. err = bucket.PutObjectFromFile(objectName, localFile, oss.Progress(&OssProgressListener{}))
    46. if err != nil {
    47. fmt.Println("Error:", err)
    48. os.Exit(-1)
    49. }
    50. }