郁闷了一下午了,传个参怎么遇到这么古怪的事情了!!!(已经解决)

bsdx866 · · 1583 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

哪位大神帮忙给看看,郁闷了一下午了太气人了! ``` func Upload(w http.ResponseWriter, r *http.Request) { r.ParseMultipartForm(1024) _, _, err := r.FormFile("upload") if err != nil { w.Write([]byte("文件上传错误")) return } for _, fileHead := range r.MultipartForm.File["upload"] { file, err := fileHead.Open() if err != nil { log.Println("没有接收到文件", err) return } defer file.Close() buf := make([]byte, 512) file.Read(buf) objContentType := http.DetectContentType(buf) //用这个就报错 // objContentType := "application/pdf" 用这个就没问题 miniolib.UploadObj(fileHead.Filename, file, fileHead.Size, objContentType) } } ``` 下面这个是UploadObj的写法 ``` func UploadObj(objectName string, fp io.Reader, size int64, opt string) { object, err := client.PutObject(context.Background(), bucketName, objectName, fp, size, minio.PutObjectOptions{ContentType: opt}) if err != nil { log.Println("上传失败:", err) return } log.Printf("文件上传成功 %s of 文件大小为: %d\n", objectName, object.Size) } ``` 原因是因为file.Read读取了512个字节作为判断contentType的类型,再上传数据的时候file的完整性就没有了,所以会提示错误。 正确的写法是下面的: ``` func Upload(w http.ResponseWriter, r *http.Request) { err := r.ParseMultipartForm(1024) if err != nil { w.Write([]byte("没有上传文件,请重试")) return } for _, fileHead := range r.MultipartForm.File["upload"] { file, err := fileHead.Open() if err != nil { log.Println(err) return } defer file.Close() objContentType := fileHead.Header["Content-Type"] miniolib.UploadObj(fileHead.Filename, file, fileHead.Size, objContentType[0]) } } ```

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1583 次点击  ∙  1 赞  
加入收藏 微博
1 回复  |  直到 2023-09-05 14:37:47
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传