我对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转换为字符串?任何提示都非常感谢!
答案 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 (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))
}