欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > 使用mime/multipart上传文件报错:multipart: NextPart: EOF

使用mime/multipart上传文件报错:multipart: NextPart: EOF

2024/10/25 2:18:41 来源:https://blog.csdn.net/janthinasnail/article/details/141647733  浏览:    关键词:使用mime/multipart上传文件报错:multipart: NextPart: EOF

go版本: go1.22.2

server文件:

package mainimport ("fmt""io""net/http""os""time"
)func main() {http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {w.Write([]byte("hello world"))})http.HandleFunc("/upload", func(w http.ResponseWriter, r *http.Request) {r.ParseMultipartForm(10 << 20) // 限制上传文件最大10Mf, fh, err := r.FormFile("hello")fmt.Println("r.FormFile f: ", f)fmt.Println("r.FormFile fh: ", fh)fmt.Println("r.FormFile err: ", err)if err != nil {http.Error(w, "r.FormFile err: "+err.Error(), http.StatusBadRequest)return}filename := fmt.Sprintf("%d-hello.txt", time.Now().Unix())fw, err := os.OpenFile(filename, os.O_CREATE, 0666)if err != nil {fmt.Println("os.OpenFile err: ", err)http.Error(w, "os.OpenFile err: "+err.Error(), http.StatusBadRequest)return}_, err = io.Copy(fw, f)if err != nil {fmt.Println("io.Copy err: ", err)http.Error(w, "io.Copy err: "+err.Error(), http.StatusBadRequest)return}fw.Close()f.Close()w.Write([]byte("ok"))fmt.Fprint(w, "finished")})http.ListenAndServe(":8000", nil)
}

client文件:

package mainimport ("bytes""fmt""io""mime/multipart""net/http""os"
)func main() {buf := bytes.Buffer{}wr := multipart.NewWriter(&buf)fieldname := "hello"    // 字段名filename := "hello.txt" // 文件名fw, err := wr.CreateFormFile(fieldname, filename)if err != nil {fmt.Println("wr.CreateFormFile err: ", err)return}fr, err := os.Open(filename)if err != nil {fmt.Println("os.Open err: ", err)return}_, err = io.Copy(fw, fr)if err != nil {fmt.Println("io.Copy err: ", err)return}// -----------------------// 创建form和发送请求在同一个函数中,如果这样写会,服务端报错:multipart: NextPart: EOF// defer wr.Close()// -----------------------fr.Close()wr.Close()// -----------------------// 发送请求link := "http://127.0.0.1:8000/upload"request, err := http.NewRequest(http.MethodPost, link, &buf)if err != nil {fmt.Println("http.NewRequest err: ", err)return}// 设置headerrequest.Header.Set("Content-Type", wr.FormDataContentType())client := http.Client{}response, err := client.Do(request)if err != nil {fmt.Println("client.Do err: ", err)return}defer response.Body.Close()result, err := io.ReadAll(response.Body)fmt.Println(string(result), err)
}
# 报错信息
multipart: NextPart: EOF# 上述代码说明
......// -----------------------// 创建form和发送请求在同一个函数中,如果这样写会,服务端报错:multipart: NextPart: EOF// defer wr.Close()// -----------------------fr.Close()wr.Close()// -----------------------......

hello.txt文件:

hello world

执行文件:

# 服务端
go run server.go# 客户端
go run client.go

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com