关于pos请求的疑问??

zhaohao · · 2773 次点击
可以分享您知道的 ?
#2
更多评论
~~~ func postFile(filename string, targetURL string) error { star := time.Now() //得到时间 bodyBuf := &bytes.Buffer{} bodyWriter := multipart.NewWriter(bodyBuf) //NewWriter函数返回一个设定了一个随机边界的Writer,数据写入w。 //关键的一步操作 //CreateFormFile是CreatePart方法的包装, 使用给出的属性名和文件名创建一个新的form-data头。 _, err := bodyWriter.CreateFormFile("file", filename) Len := len(bodyBuf.Bytes()) buf1 := &bytes.Buffer{} buf1.Write(bodyBuf.Bytes()[0:Len]) bodyWriter.Close() //将尾部写入随机尾部 buf2 := &bytes.Buffer{} buf2.Write(bodyBuf.Bytes()[Len:]) //将尾部写入到buf2中 //打开文件句柄操作 fh, err := os.Open(filename) if err != nil { fmt.Println("can not opening file") return err } defer fh.Close() contentType := bodyWriter.FormDataContentType() mr := io.MultiReader(buf1, fh, buf2) //将其串联,使待发送部分在随机边界内 resp, err := http.Post(targetURL, contentType, mr) if err != nil { return err } defer resp.Body.Close() resp_body, err := ioutil.ReadAll(resp.Body) if err != nil { return err } fmt.Println(resp.Status) fmt.Println(string(resp_body)) if resp.StatusCode != 200 { return nil } delta := time.Since(star) addRunTime(int64(delta)) return nil } ~~~ 第一段代码比第二段怎么快,因为第二段有一个多了个拷贝 _, err = io.Copy(fileWriter, fh)
#3