为了账号安全,请及时绑定邮箱和手机立即绑定

gin-gonic 中的多部分文件上传验证

gin-gonic 中的多部分文件上传验证

Go
MYYA 2021-10-25 20:16:09
我正在尝试为基于 GIN 框架的基于 Go 的 Web 应用程序添加验证。在网页上,我正在选择一个文件并提交,服务器正在处理它。在服务器端,我尝试添加验证以检查文件是否已提供。如果没有,则重定向回原始页面。    func panic(err error)  {        if err != nil {            log.Println(err)        }    }    func displayTable (c *gin.Context) {        file, _ , err := c.Request.FormFile("file")    panic(err)    if file == nil {        log.Println("File is nil.")        log.Println(err)        log.Println("*****")        c.HTML(http.StatusInternalServerError, "index.tmpl", gin.H{            "title": "Select the input file","error" : "Please select the input file.",        })          } else {        defer file.Close()    }    filename := strconv.FormatInt(time.Now().Unix(),10)     out, err := os.Create("./tmp/"+filename+".xml")    panic(err)    defer out.Close()    _, err = io.Copy(out, file)    panic(err)    xmlFile, err := os.Open("./tmp/"+filename+".xml")    panic(err)    defer xmlFile.Close()    // Other Implementation Details }即使在提供处理之后,我也会在 go 代码中感到恐慌。请让我知道我在实施中遗漏了什么。谢谢。    http: no such file    File is nil.    http: no such file    *****    2015/08/04 13:19:10 Panic recovery -> runtime error: invalid memory address or nil pointer dereference    c:/go/src/runtime/panic.go:387 (0x414d36)    c:/go/src/runtime/panic.go:42 (0x4142a5)    c:/go/src/runtime/os_windows.go:42 (0x414066)    c:/go/src/io/io.go:362 (0x45268f)    D:/code/src/exmp/serverexmaple.go:45 (0x40168f)            displayTable: _, err = io.Copy(out, file)    D:/code/src/github.com/gin-gonic/gin/context.go:95 (0x49f8ea)            (*Context).Next: c.handlers[c.index](c)    D:/code/src/github.com/gin-gonic/gin/logger.go:56 (0x4ac490)            func.007: c.Next()    D:/code/src/github.com/gin-gonic/gin/context.go:95 (0x49f8ea)            (*Context).Next: c.handlers[c.index](c)    D:/code/src/github.com/gin-gonic/gin/recovery.go:43 (0x4acc80)            func.009: c.Next()
查看完整描述

2 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

我知道我在panic处理上犯了错误。如果我在 c.HTML 之后添加 return 语句,则验证有效。这将阻止函数执行其余代码。感谢@AlexAtNet 的建议,我将来会牢记在心。


if file == nil {

    log.Println("File is nil.")

    log.Println(err)

    log.Println("*****")

    c.HTML(http.StatusInternalServerError, "index.tmpl", gin.H{

        "title": "Select the input file","error" : "Please select the input file.",

    })   

    return 


查看完整回答
反对 回复 2021-10-25
  • 2 回答
  • 0 关注
  • 303 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信