Base64字符串解码并另存为文件

时间:2017-04-04 15:59:48

标签: file go base64

我一直在努力,希望有人可以提供帮助。如果这是一个愚蠢的问题,请原谅我,因为我是Go的新手。

我有一个结构,其中包含base64。结构看起来像这样:

 type UploadedFile struct {
    PartnerId string
    FileName string
    UploadDateTime string
    FileChecksum string
    FileBase64 string
 }

我想取这个base64字符串,解码它然后保存它,听起来很简单,它可能是,但我很震惊。

代码如下所示:

decoder := json.NewDecoder(r.Body)
uploadedFile := models.UploadedFile{}
err := decoder.Decode(&uploadedFile)
dec, _ := base64.StdEncoding.DecodeString(uploadedFile.FileBase64)

我从哪里开始?我已经尝试了很多东西,我只是在文件中不断出现错误。

我尝试调整人们用于图像的代码,但我总是崩溃和刻录,因为文件不是图像,它可能是任何东西

提前致谢。

1 个答案:

答案 0 :(得分:8)

更新:我忘了提及,如果您使用f.Write,请务必在写完后再致电f.Sync以确保您拥有的所有内容写的实际上是存储的。该示例显示了更新的代码。

不确定您的代码示例是否不完整,因此这个答案可能无关紧要,但是要将解码后的字符串字节保存到首先需要打开或创建文件的文件中,然后将字节写入其中。像这样:

package main

import (
    "encoding/base64"
    "io"
    "os"
)

var b64 = `TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlz
IHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2Yg
dGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGlu
dWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRo
ZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=`

func main() {
    dec, err := base64.StdEncoding.DecodeString(b64)
    if err != nil {
        panic(err)
    }

    f, err := os.Create("myfilename")
    if err != nil {
        panic(err)
    }
    defer f.Close()

    if _, err := f.Write(dec); err != nil {
        panic(err)
    }
    if err := f.Sync(); err != nil {
        panic(err)
    }
}

在此处运行:https://play.golang.org/p/SZVquhZdXC