将base64请求主体编码为二进制文件

时间:2014-04-11 12:38:08

标签: go

我对Go语言相当新,并且很难实现以下目标:我接收到base64字符串(基本上是编码图像)并需要将其转换为二进制形式服务器

func addOrUpdateUserBase64(w http.ResponseWriter, r *http.Request, params martini.Params) {
    c := appengine.NewContext(r)
    sDec, _ := b64.StdEncoding.DecodeString(r.Body)
...

这不起作用,因为DecodeString需要一个字符串...如何将request.Body转换为字符串?任何提示都非常感谢!

3 个答案:

答案 0 :(得分:7)

请勿使用base64.StdEncoding.DecodeString,而是直接从r.Body

设置解码器
dec := base64.NewDecoder(base64.StdEncoding, r.Body)`  // dec is an io.Reader

现在使用dec,例如转储到bytes.Buffer之类的

buf := &bytes.Buffer{}
n, err := io.copy(buf, dec)

r.Body解码为buf或直接复制到http.Response或文件。

如果将所有记忆保存完好,请使用下面的Peter方法。

答案 1 :(得分:1)

  

func (*Encoding) Decode

func (enc *Encoding) Decode(dst, src []byte) (n int, err error)
     

解码使用编码enc解码src。它写的最多   DecodedLen(len(src))字节到dst并返回字节数   书面。如果src包含无效的base64数据,它将返回   成功写入的字节数和CorruptInputError。新队   字符(\ r和\ n)将被忽略。

答案 2 :(得分:-1)

还有一个选项就是将r.Body投射到string

//编辑,修复代码以使用io.Reader

import "io/ioutil"
..........
if body, err := ioutil.ReadAll(r.Body); err == nil {
       sDec, _ := b64.StdEncoding.DecodeString(string(body))
}