构建一个后端 go 服务器,该服务器可以采用具有多个输入的形式,其中 3 个具有多个文件输入。我搜索了一下,它指出,如果你想做这样的东西,你不想使用典型的
if err := r.ParseMultipartForm(32 << 20); err != nil {
fmt.Println(err)
}
// get a reference to the fileHeaders
files := r.MultipartForm.File["coverArt"]
相反,您应该使用
mr, err := r.MultipartReader()
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
}
标准表单数据:
名字
电子邮件
封面图片照片(多个文件)
个人资料照片(多个文件)
2 音频文件 (2 歌曲)
2个视频(个人介绍,无伴奏合唱中的人物录音)
表单
<form method="post" enctype="multipart/form-data" action="/upload">
<input type="text" name="name">
<input type="text" name="email">
<input name="coverArt" type="file" multiple />
<input name="profile" type="file" multiple />
<input type="file" name="songs" multiple />
<input type="file" name="videos" multiple/>
<button type="submit">Upload File</button>
</form>
转到代码:
func FilePOST(w http.ResponseWriter, r *http.Request) error {
fmt.Println("File Upload Endpoint Hit")
mr, err := r.MultipartReader()
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
}
for {
part, err := mr.NextPart()
// This is OK, no more parts
if err == io.EOF {
break
}
// Some error
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
}
转到服务器错误: 去运行 main.go [15:58:21] 现在在以下位置提供服务 www.localhost:3000 文件上传端点 命中信息[0009] POST /上传已过=“680.422μs” 主机 = 方法 = POST 路径=/上传查询= 2021/07/14 15:58:32 http: 恐慌服务 [::1]:62924: 运行时错误: 无效的内存地址或 nil 指针取消引用
喵喵时光机
相关分类