我有一个jpeg image.Image
,我想decode
到请求正文。简化如下,它似乎无法完成请求。该程序挂起。
r, w := io.Pipe()
jpeg.Encode(w, img, &jpeg.Options{ 80 })
req, e := http.NewRequest("PUT", myUrl, r)
if e != nil {
return nil, e
}
http.DefaultClient.Do(req)
如何将图像写入请求正文?
答案 0 :(得分:2)
只需使用缓冲区
var w bytes.Buffer
jpeg.Encode(&w, img, &jpeg.Options{80})
req, e := http.NewRequest("PUT", myUrl, &w)
if e != nil {
log.Fatal(e)
}
http.DefaultClient.Do(req)
答案 1 :(得分:1)
jpeg.Encode
无法进行,因为它阻止写入管道(管道不缓冲)。
您需要缓冲编码图像,或同时运行Encode和http请求。
// make sure to buffer this channel, so the goroutine can exit if we return early
errChan := make(chan error, 1)
r, w := io.Pipe()
go func() {
errChan <- jpeg.Encode(w, img, &jpeg.Options{80})
}()
req, err := http.NewRequest("PUT", myUrl, r)
if err != nil {
return nil, err
}
err := http.DefaultClient.Do(req)
if err != nil {
return nil, err
}
// check for an encoding error
err := <-errChan
if err != nil {
return nil, err
}