util.TempFileWithSize(1024 * 1024 * 6)
files = append(files, file)
if err != nil {
log.Fatal(err)
}
defer func() {
for _, f := range files {
f.Close()
os.Remove(f.Name())
}
}()
fileInfo, err := file.Stat()
if err != nil {
log.Fatal(err)
}
var partSize int64 = 1024 * 1024 * 5
var totalSize int64 = fileInfo.Size()
var partCount int = int(math.Ceil(float64(totalSize) / float64(partSize)))
parts := make([]bos.PartSummary, 0, partCount)
for i := 0; i < partCount; i++ {
var skipBytes int64 = partSize * int64(i)
var size int64 = int64(math.Min(float64(totalSize-skipBytes), float64(partSize)))
tempFile, err := util.TempFile(nil, "", "")
files = append(files, tempFile)
if err != nil {
panic(err)
}
limitReader := io.LimitReader(file, size)
_, err = io.Copy(tempFile, limitReader)
if err != nil {
panic(err)
}
partNumber := i + 1
uploadPartRequest := bos.UploadPartRequest{
BucketName: bucketName,
ObjectKey: objectKey,
UploadId: uploadId,
PartSize: size,
PartNumber: partNumber,
PartData: tempFile,
}
parts = append(parts, bos.PartSummary{PartNumber: partNumber})
uploadPartResponse, err := bosClient.UploadPart(uploadPartRequest, nil)
if err != nil {
panic(err)
}
parts[partNumber-1].ETag = uploadPartResponse.GetETag()
}
completeMultipartUploadRequest := bos.CompleteMultipartUploadRequest{
BucketName: bucketName,
ObjectKey: objectKey,
UploadId: uploadId,
Parts: parts,
}
completeMultipartUploadResponse, err := bosClient.CompleteMultipartUpload(
completeMultipartUploadRequest, nil)
if err != nil {
panic(err)
}
fmt.Println(completeMultipartUploadResponse.ETag)
Это похоже на язык Go.
В тексте описывается процесс загрузки файла в облачное хранилище с использованием многокомпонентной загрузки. В коде создаются временные файлы, которые используются для разделения исходного файла на части и последующей загрузки этих частей в хранилище. Затем выполняется объединение всех частей файла и получение итогового ETag. ``` sessionTokenResponse, err := bosClient.GetSessionToken(req, nil)
if err != nil {
log.Println(err)
} else {
option := &bce.SignOption{
Credentials: bce.NewCredentials(sessionTokenResponse.AccessKeyId, sessionTokenResponse.SecretAccessKey),
Headers: map[string]string{"x-bce-security-token": sessionTokenResponse.SessionToken},
}
putObjectResponse, err := bosClient.PutObject(bucketName, objectKey, str, nil, option)
if err != nil {
log.Println(err)
} else {
fmt.Println(putObjectResponse.GetETag())
}
}
}
### Others
More api usages please refer
* [bos/client_test.go](bos/client_test.go)
* [baidubce-sdk-go-examples](https://github.com/guoyao/baidubce-sdk-go-examples)
## Authors
**Guoyao Wu**
+ [https://guoyao.me](https://guoyao.me)
+ [https://github.com/guoyao](https://github.com/guoyao)
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )