golang Gin上传文件返回前端及中间件实现示例

目录
  • 上传文件
  • 文件返回给前端
  • 中间件
    • 中间件调用两种方式
  • 单个中间件
    • 多个中间件

上传文件

package main
import (
	"fmt"
	"github.com/gin-gonic/gin"
)
func main() {
	router := gin.Default()
	// 给表单限制上传大小 (默认 32 MiB)
	// router.MaxMultipartMemory = 8 << 20  // 8 MiB
	router.POST("/upload", func(c *gin.Context) {
		// 单文件
		file, _ := c.FormFile("file")
		// 上传文件到指定的路径
		c.SaveUploadedFile(file, "./"+file.Filename)

		//c.String(http.StatusOK, fmt.Sprintf("'%s' uploaded!", file.Filename))
		c.Writer.Header().Add("Content-Disposition",fmt.Sprintf("attachment;filename=%s",file.Filename))
		c.File("./"+file.Filename)
	})
	router.Run(":8080")
}

文件返回给前端

c.Writer.Header().Add("Content-Disposition",fmt.Sprintf("attachment;filename=%s",file.Filename))
c.File("./"+file.Filename)  //返回文件路径,自动调用http.ServeFile方法

中间件

中间件调用两种方式

方式一:在Use中连续调用

v1 := r.Group("v1").Use(middel())
v1 := r.Group("v1").Use(middel(),middel2())

方式二:Use链式调用

v1 := r.Group("v1").Use(middel()).Use(middel2())

单个中间件

package main
import (
	"fmt"
	"github.com/gin-gonic/gin"
)
func middel()gin.HandlerFunc{
	return func(context *gin.Context) {
		fmt.Println("我在方法前1")
		context.Next()
		fmt.Println("我在方法后1")
	}
}
func main() {
	r := gin.Default()
	v1 := r.Group("v1").Use(middel())
	v1.GET("/test", func(c *gin.Context) {
		fmt.Println("我在方法内部")
		c.JSON(200, gin.H{
			"msg": true,
		})
	})
	r.Run(":8080")
}

结果

我在方法前1
我在方法内部
我在方法后1

多个中间件

package main
import (
	"fmt"
	"github.com/gin-gonic/gin"
)
func middel()gin.HandlerFunc{
	return func(context *gin.Context) {
		fmt.Println("我在方法前1")
		context.Next()
		fmt.Println("我在方法后1")
	}
}
func middel2()gin.HandlerFunc{
	return func(context *gin.Context) {
		fmt.Println("我在方法前2")
		context.Next()
		fmt.Println("我在方法后2")
	}
}
func main() {
	r := gin.Default()
	v1 := r.Group("v1").Use(middel(),middel2())
	v1.GET("/test", func(c *gin.Context) {
		fmt.Println("我在方法内部")
		c.JSON(200, gin.H{
			"msg": true,
		})
	})
	r.Run(":8080")
}
//像一个洋葱

结果

我在方法前1
我在方法前2
我在方法内部
我在方法后2
我在方法后1

以上就是golang Gin上传文件返回前端及中间件实现示例的详细内容,更多关于golang Gin上传文件返回前端中间件的资料请关注我们其它相关文章!

(0)

相关推荐

  • Golang gin跨域解决方案示例

    目录 gin跨域解决方案 cors1.go cors2.go 使用中间件 gin跨域解决方案 cors1.go package middlewares import ( "github.com/gin-gonic/gin" "net/http" ) func Cors() gin.HandlerFunc { return func(c *gin.Context) { method := c.Request.Method origin := c.Request.Hea

  • 在 Golang 中实现一个简单的Http中间件

    本文主要针对Golang的内置库 net/http 做了简单的扩展,通过添加中间件的形式实现了管道(Pipeline)模式,这样的好处是各模块之间是低耦合的,符合单一职责原则,可以很灵活的通过中间件的形式添加一些功能到管道中,一次请求和响应在管道中的执行过程如下 首先, 我定义了三个测试的中间件 Middleware1,2,3 如下 func Middleware1(next http.Handler) http.Handler { return http.HandlerFunc(func(w

  • Golang Gin框架实现文件下载功能的示例代码

    目录 Layui框架实现文件上传 Gin框架获取前端上传的文件 Gin框架的文件下载 Layui框架实现文件上传 基本的思路就是随便创建一个元素,然后使用layui的upload组件对创建的元素进行渲染,详见代码 <!DOCTYPE html> <html lang="en"> <head> <script src="jquery-3.5.0.min.js" type="text/javascript"&

  • golang开发微框架Gin的安装测试及简介

    目录 概述 安装 测试 导包 步骤 切换输出的格式 状态码 示例 前端 概述 Gin是一个golang的微框架,封装比较优雅,API友好.具有快速灵活,容错方便等特点.Gin自身的net/http足够简单,性能也非常不错 Gin下载: https://github.com/gin-gonic/gin 英文文档:https://gin-gonic.com/docs/ 安装 go get -u github.com/gin-gonic/gin 测试 导包 import "github.com/gin

  • golang gin 框架 异步同步 goroutine 并发操作

    goroutine机制可以方便地实现异步处理 package main import ( "log" "time" "github.com/gin-gonic/gin" ) func main() { // 1.创建路由 // 默认使用了2个中间件Logger(), Recovery() r := gin.Default() // 1.异步 r.GET("/long_async", func(c *gin.Context) {

  • golang-gin-mgo高并发服务器搭建教程

    gin-mgo服务器搭建 该服务器实现简单接收请求并将请求参数封装存储在mongodb数据库中,本文将讲述gin-mgo的使用方法. 项目完整代码地址: https://github.com/wayne-yhp/golang-gin-mgo gin web框架使用介绍 首先获取gin框架依赖 go get gopkg.in/gin-gonic/gin.v1 func main() { server = gin.Default() app.server.GET("/do", IndexR

  • golang Gin上传文件返回前端及中间件实现示例

    目录 上传文件 文件返回给前端 中间件 中间件调用两种方式 单个中间件 多个中间件 上传文件 package main import ( "fmt" "github.com/gin-gonic/gin" ) func main() { router := gin.Default() // 给表单限制上传大小 (默认 32 MiB) // router.MaxMultipartMemory = 8 << 20 // 8 MiB router.POST(&q

  • 上传文件返回的json数据会被提示下载问题解决方案

    最近项目中出现上传文件返回的json数据会被提示下载,只有在ie10+中才会出现这个问题.前端使用jQuery的插件ajaxForm提交表单,后台返回的数据格式为json.代码如下: 后端Python: 复制代码 代码如下: def jsonp(func):     """Wraps JSONified output for JSONP requests."""     @wraps(func)     def decorated_functio

  • java实现上传文件到oss(阿里云)功能示例

    本文实例讲述了java实现上传文件到oss(阿里云)功能.分享给大家供大家参考,具体如下: 做这个功能之前我们需要导入阿里云OSS官方提供的工具包 aliyun-sdk-oss-2.5.0.jar 这个文件 如果有最新版的话就下载最新版 aliyun.upload.AliyunConfig package aliyun.upload; public final class AliyunConfig { //你的oss所在域,要加http:// 不明白可以对照你的文件引用地址 public sta

  • Vue Element UI + OSS实现上传文件功能

    Element提供了upload上传组件,可以查看官网upload组件的详细介绍:查看upload组件的上传源码upload/ajax,使用的是XHR对象上传文件.在项目实践中,发现该上传方法上传大文件时会出现问题,所以决定使用阿里云对象存储服务(Object Storage Service,简称OSS),OSS详细介绍可以查看官网,本文主要讲解的是OSS上传文件的前端,后台开发请查看官网介绍,SDK Browser.js讲解了前端如何进行上传. 1.使用npm安装SDK的开发包: npm in

  • JavaWeb实现简单上传文件功能

    本文实例为大家分享了JavaWeb实现上传文件功能的具体代码,供大家参考,具体内容如下 基本思想:网站服务器的内部除了有Web应用,还有文件系统,客户端向网站上传文件就是将文件以流的形式传输给了服务器,如图所示: 注意事项: 1.为保证服务器的安全,上传的文件路径应放在外界不能直接访问的目录下,比如WEB-INF目录下.2.因为服务器的文件系统大小有限,上传的文件大小必须要有限制.3.为防止因为文件名重复而导致文件覆盖,应当给上传的文件夹生成唯一的标识,比如时间戳.UUID或者md5加密.4.可

  • 微信小程序实现云开发上传文件、图片功能

    目录 一.前言 二.功能简介 1.选择微信聊天记录中的文件 2.选择本地相册/拍照图片 3.上传功能 三.实现代码 1.选择聊天文件函数(js) 2.选择相册函数(js) 3.上传文件函数(js) 4.调用示例 4-1.云存储新建文件夹 4-2.完整调用代码 4-3.实现效果 四.结语 一.前言 今天的博客所实现的功能很简单,但是也很常用. 本文将这常用的代码进行了封装,可以放入自己utils类中使用,加快开发速度. 实现的功能有两个: 一.选择微信聊天文件并上传. 二.选择本地相册/拍摄图片上

  • Golang实现异步上传文件支持进度条查询的方法

    业务背景 业务需求要求开发一个异步上传文件的接口,并支持上传进度的查询. 需求分析 ZIP压缩包中,包含一个csv文件和一个图片文件夹,要求:解析csv数据存入mongo,将图片文件夹中的图片信息对应上csv中的人员信息. ZIP压缩包解压 使用golang自带的 "archive/zip" 包解压. func decompressZip(filePath, dest string) (string, string, error) { var csvName string imageF

  • TypeScript前端上传文件到MinIO示例详解

    目录 什么是MinIO? 本地Docker部署测试服务器 上传的API TypeScript实现 1. XMLHttpRequest 2. Fetch API 3. Axios 从后端获取临时上传链接 上传文件 踩过的坑 1. presignedPutObject方式上传提交的方法必须得是PUT 2. 直接发送File即可 3. 使用Axios上传的时候,需要自己把Content-Type填写成为file.type 示例代码 什么是MinIO? MinIO 是一款高性能.分布式的对象存储系统.

  • js前端上传文件缩略图技巧示例详解

    目录 引言 文件对象简介 Blob File FileReader FormData 文件对象之间的关系 缩略图的实现 总结 引言 通常情况下,前端提交给服务器的数据格式为JSON格式,但很多时候用户想上传自己的头像.视频等,这些非文本数据的时候,就不能直接以JSON格式上传到后端了. 当我们要获取用户上传的文件,可以使用input表单项,将type属性值设置为“file”. <form action=""> <input type="file"

  • elementUI自定义上传文件功能实现(前端后端超详细过程)

    目录 简介: 1.简单介绍组件( upload)的属性(熟悉参数的直接略过) 2.主要目的自定义上传文件 2.1 组件代码 2.2 data中的属性 2.3 methods的方法 3.与其他参数通过axios提交到后台 总结 简介: 自定义上传文件并与其他参数一同提交到后台(主要使用axios) 1.简单介绍组件( upload)的属性(熟悉参数的直接略过) 总结elmentUI一下它的使用和常用属性的作用. limit : 限制了上传文件的个数 , 如果你上传单个文件这里设置 1 ,多个文件就

随机推荐