1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/guoyao-baidubce-sdk-go

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md
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 )

Вы можете оставить комментарий после Вход в систему

Введение

Неофициальный Go SDK для Baidu Cloud Engine. Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/guoyao-baidubce-sdk-go.git
git@api.gitlife.ru:oschina-mirror/guoyao-baidubce-sdk-go.git
oschina-mirror
guoyao-baidubce-sdk-go
guoyao-baidubce-sdk-go
master