Кодирование изображения в байт-кодированный формат 64 - PullRequest
1 голос
/ 26 февраля 2020

Когда я выполняю один и тот же код на двух разных версиях Go (go1.10.8 darwin / amd64 и go1.6.1 linux / amd64) в более ранней версии, следующий код корректно кодирует строку, но в более поздней версии это кодирует строку в неправильный формат.

package main

import (
    "bufio"
    "bytes"
    "encoding/base64"
    "fmt"
    "io/ioutil"
    "os"
)

func main() {
    var (
        file     *os.File
        fileInfo os.FileInfo
        err      error
        content  []byte
    )
    filePath := "random.jpeg"
    if file, err = os.Open(filePath); err == nil {
        var buf bytes.Buffer
        reader := bufio.NewReader(file)
        bufWriter := bufio.NewWriter(&buf)
        if content, err = ioutil.ReadAll(reader); err == nil {
            _ = content
            encoder := base64.NewEncoder(base64.StdEncoding, bufWriter)
            encoder.Write(content)
            //  finalSlice, _ := ioutil.ReadAll(bufWriter)
            //  fmt.Println("and the final slcie becomes", finalSlice)

            encodedString := string(buf.Bytes())
            fmt.Println("and the final bytes becomes", encodedString)
            _ = fileInfo
            _ = encoder
        } else {
            fmt.Println("error cma in", err)
        }
        //} //else {
        //fmt.Println("And here errror becimes", err)
        //}
    } else if err != nil {
        fmt.Println("here the error become")
    }
}

в чем может быть причина

1 Ответ

2 голосов
/ 26 февраля 2020

Вы должны грипповать sh буферизованный писатель, иначе в его буфере могут остаться данные. Может ли он зависеть от версии:

encoder := base64.NewEncoder(base64.StdEncoding, bufWriter)
encoder.Write(content)
encoder.Flush()

Хотя вы уже выполняете запись в буфер в памяти, буферизованный модуль записи совершенно не нужен, запись напрямую в buf.

* 1006. *

Также рекомендуется обновить Go SDK , последняя версия 1.14, Go 1.6 и Go 1.10 больше не поддерживаются.

...