在将文件上传到我的 go 应用程序时,我遇到了恐慌。


 panic: runtime error: invalid memory address or nil pointer dereference

 /Users/bob/Projects/go/src/github.com/zenazn/goji/web/middleware/recoverer.go:24 (0xbaf5b)

    func.006: debug.PrintStack()

 /usr/local/go/src/pkg/runtime/panic.c:248 (0x1043d)

    panic: runtime·newstackcall(d->fn, (byte*)d->args, d->siz);

 /usr/local/go/src/pkg/runtime/panic.c:552 (0x10eed)

    panicstring: runtime·panic(err);

 /usr/local/go/src/pkg/runtime/os_darwin.c:454 (0xfb8e)

    sigpanic: runtime·panicstring("invalid memory address or nil pointer dereference");

 /usr/local/go/src/pkg/mime/multipart/multipart.go:223 (0xb6801)

    (*Reader).NextPart: if r.currentPart != nil {

 /Users/bob/Projects/go/src/github.com/app/controllers/company_sheet_controller.go:32 (0x2ee18)

    NewCompanySheet: part, err := mr.NextPart()

 /usr/local/go/src/pkg/net/http/server.go:1235 (0x44f00)

    HandlerFunc.ServeHTTP: f(w, r)

 /Users/bob/Projects/go/src/github.com/zenazn/goji/web/router.go:113 (0x6bc0a)

此方法处理来自多部分表单的上传,提取文件内容和边界数据。在r.FormFile上请求方法用于设置文件和报头。为了从帖子中提取额外的数据,我使用r.MultipartReader. 从我看到的错误描述r中,已经声明为ParseMultipartForm使用r.FormFile. 当分别使用不同的请求方法执行函数时,我没有收到任何错误。r.FormFile并且r.MultipartReader隔离工作正常。我不能混合使用这两种请求方法吗?


func Upload(r *http.Request) {

  file, header, err := r.FormFile("file")

  ErrorCheck(err)


  mr, err := r.MultipartReader()

  ErrorCheck(err)

  part, err := mr.NextPart()

  ErrorCheck(err)


  var b bytes.Buffer

  io.CopyN(&b, part, int64(1<<20))

  fmt.Println(b.String())

  defer file.Close()

}