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中空接口的具体使用,具有一定的参考价值,感兴趣的可以了解一下... 目录接口-空接口1. 什么是空接口?2. 如何使用空接口?第一,第二,第三,3. 空接口几个要注意的坑坑1:坑2:坑3:接口-空接口1. 什么是空接

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

Python GUI框架中的PyQt详解

《PythonGUI框架中的PyQt详解》PyQt是Python语言中最强大且广泛应用的GUI框架之一,基于Qt库的Python绑定实现,本文将深入解析PyQt的核心模块,并通过代码示例展示其应用场... 目录一、PyQt核心模块概览二、核心模块详解与示例1. QtCore - 核心基础模块2. QtWid

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

最新Spring Security实战教程之Spring Security安全框架指南

《最新SpringSecurity实战教程之SpringSecurity安全框架指南》SpringSecurity是Spring生态系统中的核心组件,提供认证、授权和防护机制,以保护应用免受各种安... 目录前言什么是Spring Security?同类框架对比Spring Security典型应用场景传统

Go语言中最便捷的http请求包resty的使用详解

《Go语言中最便捷的http请求包resty的使用详解》go语言虽然自身就有net/http包,但是说实话用起来没那么好用,resty包是go语言中一个非常受欢迎的http请求处理包,下面我们一起来学... 目录安装一、一个简单的get二、带查询参数三、设置请求头、body四、设置表单数据五、处理响应六、超

Python结合Flask框架构建一个简易的远程控制系统

《Python结合Flask框架构建一个简易的远程控制系统》这篇文章主要为大家详细介绍了如何使用Python与Flask框架构建一个简易的远程控制系统,能够远程执行操作命令(如关机、重启、锁屏等),还... 目录1.概述2.功能使用系统命令执行实时屏幕监控3. BUG修复过程1. Authorization

SpringBoot集成图片验证码框架easy-captcha的详细过程

《SpringBoot集成图片验证码框架easy-captcha的详细过程》本文介绍了如何将Easy-Captcha框架集成到SpringBoot项目中,实现图片验证码功能,Easy-Captcha是... 目录SpringBoot集成图片验证码框架easy-captcha一、引言二、依赖三、代码1. Ea

Golang基于内存的键值存储缓存库go-cache

《Golang基于内存的键值存储缓存库go-cache》go-cache是一个内存中的key:valuestore/cache库,适用于单机应用程序,本文主要介绍了Golang基于内存的键值存储缓存库... 目录文档安装方法示例1示例2使用注意点优点缺点go-cache 和 Redis 缓存对比1)功能特性