Gin 文件上传工具

工具介绍

通过 &gintool.Upload{} 对象可以快速实现基于 Gin 框架的文件上传功能,相关属性配置详见下面的示例源码注释部分。

前端提交示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <form action="/upload" method="post" enctype="multipart/form-data">
        <input type="file" name="file" />
        <input type="submit" value="提交" />
    </form>
</body>
</html>

GO 示例

package main

import (
	"fmt"
	"html/template"

	"github.com/cnlesscode/gotool/gintool"
	"github.com/gin-gonic/gin"
)

func main() {

	r := gin.Default()

	// 处理上传
	r.POST("/upload", func(ctx *gin.Context) {
		uploader := &gintool.Upload{}
		// 文件域名称
		uploader.FileName = "file"
		// 文件大小限制, 单位 M
		uploader.MaxSize = 10
		// 允许的类型
		// * 代表全部类型
		uploader.AllowTypes = "image/png,image/jpg"
		// 允许的扩展名
		// * 代表全部
		uploader.AllowExeNames = "png,jpg,jpeg"
		// 目标文件夹
		uploader.TargetDir = "./static"
		// 文件夹命名规则
		// 默认空 : 空代表使用目标文件夹
		// year : 每年新建一个文件夹
		// month : 每月新建一个文件夹
		// day : 每天新建一个文件夹
		uploader.DirNamingRule = "month"
		// 文件命名规则
		// 默认空 : 空代表使用上传时的文件名
		// random : 随机字符串形式的文件名
		uploader.FileNamingRule = "random"

		filePath, err := uploader.Run(ctx)
		if err == nil {
			ctx.JSON(200, gin.H{"filePath": filePath})
		} else {
			fmt.Printf("err: %v\n", err)
			fmt.Printf("uploader.ExtendName: %v\n", uploader.ExtendName)
			fmt.Printf("uploader.FileType: %v\n", uploader.FileType)
			ctx.JSON(200, gin.H{"error": err.Error()})
		}
	})

	// 展示上传视图
	r.GET("/", func(ctx *gin.Context) {
		t, _ := template.ParseFiles("./templates/upload.html")
		t.Execute(ctx.Writer, gin.H{})
	})

	// 监听指定端口
	r.Run(":8080")

}