golang multipart/form-data POST上传文件
发布时间:2020-12-16 18:35:58 所属栏目:大数据 来源:网络整理
导读:package mainimport ("bytes""errors""fmt""io/ioutil""mime/multipart""net/http")func main() {createMemoToAmazon()}func createMemoToAmazon() error {buf := new(bytes.Buffer)w := multipart.NewWriter(buf)err := w.WriteField("comment","我的世界!
package main import ( "bytes" "errors" "fmt" "io/ioutil" "mime/multipart" "net/http" ) func main() { createMemoToAmazon() } func createMemoToAmazon() error { buf := new(bytes.Buffer) w := multipart.NewWriter(buf) err := w.WriteField("comment","我的世界!!!") if err != nil { fmt.Println(err) return err } resp,err := http.Get("http://www.xxx.com/1d595495-0580-49ec-b96c-cc3346096718") if err != nil { fmt.Println(err) return err } defer resp.Body.Close() if resp.StatusCode != 200 { return errors.New("resp status:" + fmt.Sprint(resp.StatusCode)) } bin,err := ioutil.ReadAll(resp.Body) if err != nil { fmt.Println(err) return err } fw,err := w.CreateFormFile("file","1d595495-0580-49ec-b96c-cc3346096718") if err != nil { fmt.Println(err) return err } _,err = fw.Write(bin) if err != nil { fmt.Println(err) return err } w.Close() req,err := http.NewRequest("POST","http://localhost:8080/info",buf) if err != nil { fmt.Println("req err: ",err) return err } req.Header.Set("Content-Type",w.FormDataContentType()) resp,err = http.DefaultClient.Do(req) if err != nil { fmt.Println("resp err: ",err) return err } defer resp.Body.Close() if resp.StatusCode != 200 { return errors.New("resp status:" + fmt.Sprint(resp.StatusCode)) } return nil } 如果要指定上传的每个部分的Content-Type,则需要重写multipart.Writer的CreateFormField和CreateFormFile方法
func CreateFormFile(fieldname,filename,contentType string,w *multipart.Writer) (io.Writer,error) { h := make(textproto.MIMEHeader) h.Set("Content-Disposition",fmt.Sprintf(`form-data; name="%s"; filename="%s"`,escapeQuotes(fieldname),escapeQuotes(filename))) h.Set("Content-Type",contentType) return w.CreatePart(h) } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- bzoj3110 K大数查询(整体二分+线段树)
- php – Laravel 5.2如何在“AND”条件下使用“OR LIKE”
- php – 使用Laravel Socialite获取Google刷新令牌
- perl中的defined和exists
- 【招聘】武汉传神招数据分析师(20170506)
- perl – 我不应该使用Storable或YAML序列化我的(Moose)对象
- groovy – 有没有办法让@Builder注释适用于不可变类?
- Delphi属性中字符串的最大长度TMemo的行
- spring – 带有Hibernate 5的Oracle 12c Identity列
- 在Perl中,如何只替换字符串的第一个字符?