2017-04-04 26 views
0

これは私の頭の中で行われており、誰かが助けてくれることを願っています。もし私が非常に新しくて愚かな質問であれば、私を許してください。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、イメージ、および巨大なバイナリファイルのために働いていました。だから私はちょうどこの1つの明白さを欠いていたようだ。 –

関連する問題