Gin(二) 文件上传

文件上传

文件上传接收的文件格式是: multipart/form-data

  • 处理multipart forms提交文件时默认的内存限制是32 MB
// gin.go
 const defaultMultipartMemory = 32 << 20 // 32 MB
  • 可以通过下面的方式修改
router.MaxMultipartMemory = 8 << 20  // 8 MB

1. 单个文件上传

package main

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"net/http"
)

/*
  单个文件上传
    文件上传接收的文件格式是: multipart/form-data
 */

// singleFileUploadHandle 当文件上传
func singleFileUploadHandle(ctx *gin.Context)  {

	// 获取文件
	// 根据上传时的参数名获取上传的文件内容 --> 返回对象为 *multipart.FileHeader
	fileHeader, err := ctx.FormFile("file")
	if err != nil {
		ctx.JSON(http.StatusInternalServerError,gin.H{
			"message": err.Error(),
		})
        return
	}

	// 保存文件内容
	// 拼接文件名, 这里直接写死了
	targetFileName := fmt.Sprintf("D:/gin_upload_test/%s", fileHeader.Filename)

	// 将文件保存到指定的目录
	err = ctx.SaveUploadedFile(fileHeader,targetFileName)
	if err != nil {
		ctx.JSON(http.StatusInternalServerError,gin.H{
			"message": err.Error(),
		})
	} else {
		ctx.JSON(http.StatusOK, gin.H{
			"message": fmt.Sprintf("%s upload success!", fileHeader.Filename),
		})
	}
}
func main() {

	// 创建路由
	r := gin.Default()

	// 绑定路由规则
	r.POST("/upload/single", singleFileUploadHandle)

	// 监听端口
	r.Run(":9000")
}

在这里插入图片描述
在这里插入图片描述

2. 多文件上传

package main

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"net/http"
)

/**
  多文件上传
 */

// multiFileUploadHandle 多文件上传
func multiFileUploadHandle(ctx *gin.Context) {

	// form 是一个存储文件信息的结构体
	/**
	  type Form struct {
		Value map[string][]string
		File  map[string][]*FileHeader
	 */
	form, err := ctx.MultipartForm()
	if err != nil {
		ctx.JSON(http.StatusInternalServerError,gin.H{
			"message": err.Error(),
		})
		return
	}

	// 获取文件列表,并保存, 返回的是一个切片 []*FileHeader
	files := form.File["file"]
	for i, file := range files {
		targetFileName := fmt.Sprintf("D:/gin_upload_test/%d_%s", i, file.Filename)
		err = ctx.SaveUploadedFile(file, targetFileName)
		
        if err != nil {
			ctx.JSON(http.StatusInternalServerError,gin.H{
				"message": err.Error(),
			})
			return
		}
	}
	ctx.JSON(http.StatusOK, gin.H{
		"message": fmt.Sprintf("upload success!"),
	})
}

func main() {

	// 创建路由
	r := gin.Default()

	// 绑定路由规则
	r.POST("/upload/multi", multiFileUploadHandle)

	// 监听端口
	r.Run(":9000")
}

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值