工作中遇到的问题。

接着上篇文章,业务需求,需要将上篇生成的海报保存成公众号的永久图片素材。

去看了看公众号文档,要求使用Form表单进行传输。

找了找资料,记录一下。

 // 创建新的buffer存放表单数据
buf := new(bytes.Buffer)
// 这里使用了自带的 multipart 包, 实现了对 MIME multipart 的数据解析
writer := multipart.NewWriter(buf)
// 创建文件域,根据公众号文档,需要将key设置为media - 为了记录这里也不检查 error 了
part, err := writer.CreateFormFile("media", "@poster.png")
//
// 一般来说需要调用 part.Write([]byte(你的数据)) 来写入数据
// 但是由于上篇文章是直接生成的图片,可以直接通过 png 包的 Encode 写入
// newImg 是上次生成的图片
err = png.Encode(part, newImg)
// 在准备好所有数据后记得要将写入流关闭,忘记关试了好几次都失败了
writer.Close()
// 之后就是正常的网络请求了
requestURL := "xxxxx"
req, err := http.NewRequest(http.MethodPost, requestURL, buf)
// 
req.Header.Add("Content-Type", writer.FormDataContentType())  

OK