Go gin框架控制器接收文件

2024-01-11 11:52
文章标签 go 框架 gin 控制器接收

本文主要是介绍Go gin框架控制器接收文件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 限定文件参数名(一般做法)

func FileController(c *gin.Context) {//取表单中name=file的文件fileHeader, err := c.FormFile("file")//_, fileHeader, err := c.Request.FormFile("file")//这种也行if err != nil {log.Println(err)c.JSON(http.StatusOK, gin.H{"msg": "文件接收失败",})return}var savePath = "./tmp/"                                            //文件保存路径err = c.SaveUploadedFile(fileHeader, savePath+fileHeader.Filename) //框架自带保存方法if err != nil {log.Println(err)c.JSON(http.StatusOK, gin.H{"msg": "文件保存失败",})return}log.Println("文件保存成功:", savePath+fileHeader.Filename)c.JSON(http.StatusOK, gin.H{"msg": "SUCCESS",})
}

这种需要跟客户端约定,文件使用表单上传时必须用指定的“name”作为字段名,如此处就用了“file”:

这是随大流的做法,参考:golang学习笔记(18)-gin对于文件的接收以及返回_gin接收文件-CSDN博客

2.不限定文件参数名

func FileController(c *gin.Context) {var filenameSlice []stringvar err errorvar savePath = "./tmp/" //文件保存路径// 通过c.Request.MultipartForm.File获取文件,我这里取的是表单中的所有文件,而不仅仅是名为"file"的文件fileMap := c.Request.MultipartForm.Filefor k, v := range fileMap {fmt.Println("k:", k, "v:", v) //k是表单参数中文件所属的name,v是文件所在内存地址的切片for i, fHeader := range v {filename := savePath + fHeader.Filenameerr = c.SaveUploadedFile(fHeader, filename) //框架自带保存方法if err != nil {log.Println(err)c.JSON(http.StatusOK, gin.H{"msg": "文件保存失败",})return}log.Printf("file[%d]:%s\n", i, fHeader.Filename)filenameSlice = append(filenameSlice, filename)}}if filenameSlice == nil || len(filenameSlice) < 1 {c.JSON(http.StatusOK, gin.H{"msg": "没有收到文件",})return}log.Println("文件保存成功,收到文件数:", len(filenameSlice))log.Printf("the first file[%s]\n", savePath+filenameSlice[0]) //可以取需要的任意一个文件c.JSON(http.StatusOK, gin.H{"msg": "SUCCESS",})
}

这种可以收取客户端传来的所有文件,不管是“name=file”还是“name=file1”或者别的什么都行:

3.顺带还接收其他表单参数

func FileController(c *gin.Context) {log.Println("接收到的参数: name=", c.Request.FormValue("name"), ", age=", c.Request.FormValue("age"))var filenameSlice []stringvar err errorvar savePath = "./tmp/" //文件保存路径// 通过c.Request.MultipartForm.File获取文件,我这里取的是表单中的所有文件,而不仅仅是名为"file"的文件fileMap := c.Request.MultipartForm.Filefor k, v := range fileMap {fmt.Println("k:", k, "v:", v) //k是表单参数中文件所属的name,v是文件所在内存地址的切片for i, fHeader := range v {filename := savePath + fHeader.Filenameerr = c.SaveUploadedFile(fHeader, filename) //框架自带保存方法if err != nil {log.Println(err)c.JSON(http.StatusOK, gin.H{"msg": "文件保存失败",})return}log.Printf("file[%d]:%s\n", i, fHeader.Filename)filenameSlice = append(filenameSlice, filename)}}if filenameSlice == nil || len(filenameSlice) < 1 {c.JSON(http.StatusOK, gin.H{"msg": "没有收到文件",})return}log.Println("文件保存成功,收到文件数:", len(filenameSlice))log.Printf("the first file[%s]\n", savePath+filenameSlice[0]) //可以取需要的任意一个文件c.JSON(http.StatusOK, gin.H{"msg": "SUCCESS",})
}

客户端在上传文件的同时还可携带其他数据,示例图同“2”

这篇关于Go gin框架控制器接收文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/594275

相关文章

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

go中的时间处理过程

《go中的时间处理过程》:本文主要介绍go中的时间处理过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 获取当前时间2 获取当前时间戳3 获取当前时间的字符串格式4 相互转化4.1 时间戳转时间字符串 (int64 > string)4.2 时间字符串转时间

Go语言中make和new的区别及说明

《Go语言中make和new的区别及说明》:本文主要介绍Go语言中make和new的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 概述2 new 函数2.1 功能2.2 语法2.3 初始化案例3 make 函数3.1 功能3.2 语法3.3 初始化

Go语言中nil判断的注意事项(最新推荐)

《Go语言中nil判断的注意事项(最新推荐)》本文给大家介绍Go语言中nil判断的注意事项,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.接口变量的特殊行为2.nil的合法类型3.nil值的实用行为4.自定义类型与nil5.反射判断nil6.函数返回的

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

Spring 框架之Springfox使用详解

《Spring框架之Springfox使用详解》Springfox是Spring框架的API文档工具,集成Swagger规范,自动生成文档并支持多语言/版本,模块化设计便于扩展,但存在版本兼容性、性... 目录核心功能工作原理模块化设计使用示例注意事项优缺点优点缺点总结适用场景建议总结Springfox 是

Go语言代码格式化的技巧分享

《Go语言代码格式化的技巧分享》在Go语言的开发过程中,代码格式化是一个看似细微却至关重要的环节,良好的代码格式化不仅能提升代码的可读性,还能促进团队协作,减少因代码风格差异引发的问题,Go在代码格式... 目录一、Go 语言代码格式化的重要性二、Go 语言代码格式化工具:gofmt 与 go fmt(一)

Python的端到端测试框架SeleniumBase使用解读

《Python的端到端测试框架SeleniumBase使用解读》:本文主要介绍Python的端到端测试框架SeleniumBase使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录SeleniumBase详细介绍及用法指南什么是 SeleniumBase?SeleniumBase

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

Go语言中泄漏缓冲区的问题解决

《Go语言中泄漏缓冲区的问题解决》缓冲区是一种常见的数据结构,常被用于在不同的并发单元之间传递数据,然而,若缓冲区使用不当,就可能引发泄漏缓冲区问题,本文就来介绍一下问题的解决,感兴趣的可以了解一下... 目录引言泄漏缓冲区的基本概念代码示例:泄漏缓冲区的产生项目场景:Web 服务器中的请求缓冲场景描述代码