go gin uploadfile

  1. uploadfile

uploadfile

Gin 对接受用户上传的文件做了友好的处理,在 Handler 中可以很简单的实现文件的接收。

要注意的是,上传文件的大小有限制,通常是 <32MB,你可以使用 router.MaxMultipartMemory更改它。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
//Deferred Cleanup, Checking Errors, and Potential Problems
//refer to:https://blevesearch.com/news/Deferred-Cleanup,-Checking-Errors,-and-Potential-Problems/

func Close(c io.Closer) {
err := c.Close()
if err != nil {
log.Fatal(err)
}
}

func main() {
router := gin.Default()
// 设置文件上传大小 router.MaxMultipartMemory = 8 << 20 // 8 MiB
// 处理单一的文件上传
router.POST("/upload", func(c *gin.Context) {
// 拿到这个文件
file, header, _ := c.Request.FormFile("file")

//getType := reflect.TypeOf(header)
//fmt.Println("get Type is :", getType.Name())

//getValue := reflect.ValueOf(header)
//fmt.Println("get all Fields is:", getValue)

log.Println("size:", header.Size)

fh, err := os.Create(header.Filename)
if err != nil {
log.Fatal(err)
}
defer Close(fh)
_, err1 := io.Copy(fh, file)
if err1 != nil {
log.Fatal(err1)
}
c.String(http.StatusOK, fmt.Sprintf("'%s' uploaded!", header.Filename))
})

// 处理多个文件的上传
router.POST("/uploads", func(c *gin.Context) {
form, _ := c.MultipartForm()
// 拿到集合
files := form.File["upload[]"]
for _, file := range files {
log.Println(file.Filename)
}
c.String(http.StatusOK, fmt.Sprintf("%d files uploaded!", len(files)))
})
router.Run(":8080")
}

用 curl 工具测试一下:

1
2
3
4
5
6
7
8
9
10
# 单一文件上传
$ curl -X POST http://localhost:8080/upload \
-F "file=@/Users/appleboy/test.zip" \
-H "Content-Type: multipart/form-data"

# 多文件上传
$ curl -X POST http://localhost:8080/uploads \
-F "upload[]=@/Users/appleboy/test1.zip" \
-F "upload[]=@/Users/appleboy/test2.zip" \
-H "Content-Type: multipart/form-data"

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 rootid@126.com

文章标题:go gin uploadfile

本文作者:Shawn

发布时间:2019-06-13, 10:38:00

最后更新:2019-07-30, 17:24:30

原始链接:https://gitrootid.github.io/2019/06/13/golang/go-gin-uploadfile_/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏