看代码吧~

package mainimport (    "fmt"    "io"    "net/http"    "os")func main() {    http.HandleFunc("/", index)    http.HandleFunc("/upload", upload)    http.ListenAndServe(":1789", nil)}func upload(w http.ResponseWriter, r *http.Request) {    r.ParseMultipartForm(32 << 20)    file, handler, err := r.FormFile("uploadfile")    if err != nil {        fmt.Println(err)        return    }    defer file.Close()    f, err := os.OpenFile(handler.Filename, os.O_WRONLY|os.O_CREATE, 0666)    if err != nil {        fmt.Println(err)        return    }    defer f.Close()    io.Copy(f, file)    fmt.Fprintln(w, "upload ok!")}func index(w http.ResponseWriter, r *http.Request) {    w.Write([]byte(tpl))}const tpl = `上传文件
   
`

补充:Golang 调用http 文件上传接口 进行上传文件

远程服务器有一个文件上传接口,文件用于保存到服务器本地,用go如何调用此接口将文件上传至服务器?

首先,文件上传请求方 与 接收方 要协调工作(解析等工作)

接收方:

func UploadFileToLocal(c echo.Context) error { r := c.Request()  //无论用的什么路由,原理是要从request获取数据 t := echotools.NewEchoTools(c) reader, err := r.MultipartReader() //request 获得文件 reader if err != nil {  return t.BadRequest(err.Error()) } if reader == nil {  return t.BadRequest(`未接受到文件`) }    //遍历操作 获得的 for {  part, err := reader.NextPart()  if err == io.EOF {   break  }  fmt.Printf("FileName=[%s],FormName[%s]\n",part.FileName(),part.FormName())  if part.FileName() == "" {   data, _ := ioutil.ReadAll(part)   fmt.Printf("FormData=[%s]\n", string(data))            continue  } else {            //创建一个空文件   dst, er:= os.Create("static/uploadfiles/" + part.FileName())   if er != nil {    return t.BadRequest(err.Error())   }   defer dst.Close()            //将获取到的文件复制 给 创建的文件   _,err := io.Copy(dst, part)   if err != nil {    return t.BadRequest(err.Error())   }  } }  return t.OK(`OK`)}

请求方:

func SendFile(c echo.Context) error{ t := echotools.NewEchoTools(c) r := c.Request() file, header, err := r.FormFile("file") // 获得客户端传来的 文件 file if err != nil {  return t.BadRequest("上传错误:" + err.Error()) }  bodyBuffer := &bytes.Buffer{} bodyWriter := multipart.NewWriter(bodyBuffer) fileWriter, _ := bodyWriter.CreateFormFile("files", header.Filename) io.Copy(fileWriter, file) //将 客户端文件 复制给 用于传输的 fileWriter contentType := bodyWriter.FormDataContentType() //contentType bodyWriter.Close() ip := config.Opts.UploadServerAddr //配置 resp, _ := http.Post("http://"+ip+"/uploadToLocal/"+header.Filename, contentType, bodyBuffer) defer resp.Body.Close() resp_body, _ := ioutil.ReadAll(resp.Body)  if resp.Status == `200 OK` {  return t.OK(string(resp_body)) }else {  return t.BadRequest(string(resp_body)) }}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。如有错误或未考虑完全的地方,望不吝赐教。

原文链接:https://blog.csdn.net/fyxichen/article/details/51165214