HTTP-POST file multipart

心已入冬 提交于 2019-12-01 06:45:11
Antonio

The answer can be found following this sample code

// Upload file to google code
func Upload(tarball string) (err os.Error) {
    // Create buffer
    buf := new(bytes.Buffer) // caveat IMO dont use this for large files, \
    // create a tmpfile and assemble your multipart from there (not tested) 
    w := multipart.NewWriter(buf)
    // Create a form field writer for field label
    label, err := w.CreateFormField("label")
    if err != nil {
        return err
    }
    // Write label field
    label.Write([]byte("label here"))
    // Create a form field writer for field summary
    summary, err := w.CreateFormField("summary")
    if err != nil {
        return err
    }
    // Write summary field
    summary.Write([]byte("summary here"))
    // Create file field
    fw, err := w.CreateFormFile("upload", tarball)
    if err != nil {
        return err
    }
    fd, err := os.Open(tarball)
    if err != nil {
        return err
    }
    defer fd.Close()
    // Write file field from file to upload
    _, err = io.Copy(fw, fd)
    if err != nil {
        return err
    }
    // Important if you do not close the multipart writer you will not have a 
    // terminating boundry 
    w.Close()
    req, err := http.NewRequest("POST", repoUrl, buf)
    if err != nil {
        return err
    }
    req.Header.Set("Content-Type", w.FormDataContentType())
    req.SetBasicAuth("email@email.com", "password")
    res, err := client.Do(req) 
    if err != nil {
        return err
    }
    io.Copy(os.Stderr, res.Body) // Replace this with Status.Code check
    return err
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!