Ошибка при отправке двоичных данных двоичного файла в Dynamodb

Я столкнулся с проблемой при попытке управлять экземпляром DynamodB с помощью Godynamo.

Мой код предназначен для того, чтобы взять байтовый массив gob и поместить его в DynamodB.

func (c *checkPointManager) CommitGraph(pop *Population) {
    var blob, err = pop.GobEncodeColorGraphs()
    fitness := pop.GetTotalFitness()
    if err != nil {
            log.Fatal(err)
    }

    put1 := put.NewPutItem()
    put1.TableName = "CheckPoint"
    put1.Item["fitnessScore"] = &attributevalue.AttributeValue{N: string(fitness)}
    put1.Item["population"] = &attributevalue.AttributeValue{N: string(1)}
    put1.Item["graph"] = &attributevalue.AttributeValue{B: string(blob)}
    body, code, err := put1.EndpointReq()
    if err != nil || code != http.StatusOK {
            log.Fatalf("put failed %d %v %s\n", code, err, body)
    }
    fmt.Printf("values checkpointed:  %d\n %v\n %s\n", code, err, body)

}

Каждый раз, когда я запускаю этот код, я получаю следующую ошибку. не может быть преобразовано в BLOB-объект: длина в кодировке Base64 ожидается кратной 4 байтам, но найдено: 25

Разве Godynamo не обрабатывает, убедитесь, что двоичный массив специально конвертируется в base64? Есть ли простой способ решить эту проблему?

1 ответ

"Клиентские приложения должны кодировать двоичные значения в формате base64" в соответствии с описанием двоичных типов данных Amazon DynamoDB Data Types.

Ваш код может закодировать значение, если вы хотите, см. Пакет golang base64: https://golang.org/pkg/encoding/base64

Библиотека Godynamo предоставляет функции, которые будут кодировать ее для вас, взгляните на AttributeValue:

    // InsertB_unencoded adds a new plain string to the B field.
    // The argument is assumed to be plaintext and will be base64 encoded.
    func (a *AttributeValue) InsertB_unencoded(k string) error {
Другие вопросы по тегам