2017-04-04 85 views
0

這一直在做我的頭,我希望有人可以幫助。請原諒我,如果這是一個愚蠢的問題,因爲我對Go非常陌生。Base64字符串解碼並保存爲文件

我有了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

什麼錯誤,您在獲得和在哪裏呢?你的例子並沒有真正顯示你如何將解碼的base64字符串保存到一個文件中。你是否嘗試打開/創建文件並寫入文件? – mkopriva

回答

6

更新:我忘了提的是,如果你使用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

+0

如果編碼的文件是PDF或.tar.gz,我可以使用WriteString?我可能完全錯過了這一點,但我認爲WriteString只是用來編寫一個文本文件? –

+1

您是否在尋找如何將字節寫入文件?像這樣? https://play.golang.org/p/QfY5leW4O9我會更新我的答案,如果是這樣的話。 – mkopriva

+0

我實際上使用過你的例子,它適用於.gz文件,pdf,圖像和HUGE二進制文件。所以看來我只是錯過了這一點上的明顯。 –