• 文件上传

    文件上传

    文件上传的功能比较常用,我们来看一个使用gf框架的Web Server服务端处理文件上传的例子:

    1. package main
    2. import (
    3. "github.com/gogf/gf/g"
    4. "github.com/gogf/gf/g/os/gfile"
    5. "github.com/gogf/gf/g/net/ghttp"
    6. )
    7. // 执行文件上传处理,上传到系统临时目录 /tmp
    8. func Upload(r *ghttp.Request) {
    9. if f, h, e := r.FormFile("upload-file"); e == nil {
    10. defer f.Close()
    11. name := gfile.Basename(h.Filename)
    12. buffer := make([]byte, h.Size)
    13. f.Read(buffer)
    14. gfile.PutBinContents("/tmp/" + name, buffer)
    15. r.Response.Write(name + " uploaded successly")
    16. } else {
    17. r.Response.Write(e.Error())
    18. }
    19. }
    20. // 展示文件上传页面
    21. func UploadShow(r *ghttp.Request) {
    22. r.Response.Write(`
    23. <html>
    24. <head>
    25. <title>上传文件</title>
    26. </head>
    27. <body>
    28. <form enctype="multipart/form-data" action="/upload" method="post">
    29. <input type="file" name="upload-file" />
    30. <input type="submit" value="upload" />
    31. </form>
    32. </body>
    33. </html>
    34. `)
    35. }
    36. func main() {
    37. s := g.Server()
    38. s.BindHandler("/upload", Upload)
    39. s.BindHandler("/upload/show", UploadShow)
    40. s.SetPort(8199)
    41. s.Run()
    42. }

    访问 http://127.0.0.1:8199/upload/show 选择需要上传的文件,提交之后可以看到文件上传成功到服务器上。

    服务端处理文件上传比较简单,但是需要注意的是,服务端在上传处理中需要使用f.Close()关闭掉临时上传文件指针

    HTTP客户端上传文件的例子请参考后续的【HTTP客户端-文件上传】章节