我正试图设置一个文件上传到OCI对象存储,它是工作正常到目前为止,但我不能告诉上传的当前进度。
我的函数看起来像这样:
uploadObjectStorage := func(filePath, fileName string) {
file, err := os.Open(filePath)
if err != nil {
panic("Could not open file for read")
}
ociUploadRequest := transfer.UploadRequest{
NamespaceName: oci_namespace,
BucketName: oci_bucketname,
ObjectName: common.String(fileName),
RequestMetadata: common.RequestMetadata{
RetryPolicy: &oci_retry,
},
}
req := transfer.UploadStreamRequest{
UploadRequest: ociUploadRequest,
StreamReader: file,
}
_, err = transfer.NewUploadManager().UploadStream(context.Background(), req)
if err != nil {
panic(err)
}
}
有一种类型叫做transfer. calladCallBack“,它在Part成功上传后被调用”,但是我没有设法让它工作。
- Go版本go1.21.1
- windows/amd64
- oci-go-sdk版本v65.49.1
1条答案
按热度按时间sr4lhrrt1#
我不能用
transfer.UploadCallBack
来做,但是经过一些搜索,我发现了一个how to track a download progress的例子,它也可以上传!我是这样做的:
首先创建一个结构来跟踪当前进度和总文件大小,并创建一个函数来打印当前百分比
打开文件后,将文件的总大小传递给结构
然后在
transfer.UploadStreamRequest
的StreamReader
字段上使用io.TeeReader