如何在不保存磁盘的情况下发布多部分图像?

时间:2014-05-09 09:42:07

标签: go

我需要下载图片并将其上传到其他服务上。是否可以上传它而不将其保存在磁盘上?我检查了go docs,但我找不到任何简单的方法,甚至不能从磁盘上传/发布多个部分。 到目前为止,我有这个不工作的代码

func upf(file []byte) (url string, err error) {

    URL := "http:///max.com/upimg"
    b := bytes.Buffer
    writer := multipart.NewWriter(b)

    part, err := writer.CreateFormField(file)
    if err != nil {
        return nil, err
    }

    err = writer.Close()
    if err != nil {
        return nil, err
    }

    return http.NewRequest("POST", URL, b)
}

1 个答案:

答案 0 :(得分:4)

response, error := http.Get("http://another.service.com/image.jpg")

if error != nil {
    // handle error
}

_, error = http.Post("http://max.com/upimg", "image/jpg", response.Body)

if error != nil {
    // handle error
}

如果您需要发布多部分,则必须对响应的正文进行编码;

buffer := bytes.NewBuffer(nil)

encoder := multipart.NewWriter(buffer)

field, error := encoder.CreateFormField("image") // Set "image" to correct field name

if error != nil {
    // handle error
}

_, error = io.Copy(field, response.Body) 

if error != nil {
    // handle error
}

// and then Post buffer instead of response.Body

请记住在POST请求中设置正确的Content-Type标头(例如http.Post的第二个参数),如下所示:

"multipart/form-data; boundary=" + encoder.Boundary()