Gin 08 上传文件
单文件上传
cat index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!-- 上传文件要用 form 标签的 enctype="multipart/form-data" 属性, 表明二进制上传-->
<form action="/upload" method="post" enctype="multipart/form-data">
<div>
<label for="up">选择文件: </label>
<input type="file" name="f1" id="up">
<br>
<input type="submit" value="点击上传">
</div>
</form>
</body>
</html>
后端 demo
package main
import (
"github.com/gin-gonic/gin"
"net/http"
"path"
)
func main() {
r := gin.Default()
r.LoadHTMLFiles("index.html")
r.GET("index", func(c *gin.Context) {
c.HTML(http.StatusOK,"index.html",nil)
})
r.POST("/upload", func(c *gin.Context) {
// 1. 接收前端上传文件
// gin 内置了 FormFile 方法来接收前端上传的文件
// 处理 HTML multipart forms 提交文件时默认的内存限制是32 MiB
// 可以通过下面的方式修改
// router.MaxMultipartMemory = 8 << 20 // 8 MiB
f,err := c.FormFile("f1")
if err != nil {
c.JSON(http.StatusInternalServerError,gin.H{
"msg": err.Error(),
})
} else {
// 2. 保存文件到服务端
// filePath := fmt.Sprintf("./%s",f.Filename) //
filePath := path.Join("./",f.Filename) // path 标准库
// gin 内置了 SaveUploadedFile 方法来保存前端上传的文件
c.SaveUploadedFile(f,filePath)
c.JSON(http.StatusOK,gin.H{
"msg": "ok!",
})
}
})
r.Run(":9090")
}
多文件上传
有时候需要一次上传多个文件,gin 也提供了相应的模块,来接收多个文件。然后 for 循环遍历上传。
前端:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!-- 上传文件要用 form 标签的 enctype="multipart/form-data" 属性, 表明二进制上传-->
<form action="/uploads" method="post" enctype="multipart/form-data">
<div>
<label for="up">选择文件: </label>
<!-- 多文件上传时 input 标签要使用 multiple="multiple" 属性 -->
<input type="file" name="f1" id="up" multiple="multiple">
<br>
<input type="submit" value="点击上传">
</div>
</form>
</body>
</html>
多文件上传后端 demo
package main
import (
"github.com/gin-gonic/gin"
"net/http"
"path"
)
func main() {
r := gin.Default()
r.LoadHTMLFiles("index.html")
r.GET("index", func(c *gin.Context) {
c.HTML(http.StatusOK,"index.html",nil)
})
r.POST("/uploads", func(c *gin.Context) {
// gin 多文件上传 MultipartForm 方法读取多个文件
form, err := c.MultipartForm()
if err != nil {
c.JSON(http.StatusInternalServerError,gin.H{
"msg": err.Error(),
})
}
// File 方法,把前端选中的多个文件放到 一个 map 类型里
files := form.File["file"]
// range 遍历 map, for 循环上传
for _,file := range files{
dst := path.Join("./", file.Filename)
//dst := fmt.Sprintf("./%s_%d", file.Filename)
c.SaveUploadedFile(file,dst)
}
})
r.Run(":9090")
}
Gin 08 上传文件的更多相关文章
- golang 上传文件(包括 gin 实现)
golang web服务有时候需要提供上传文件的接口,以下就是具体示例.为了示例简单(吐槽下 golang 的错误处理), 忽略了所有的错误处理.本文会用两种方式(标准库和gin)详细讲解 golan ...
- ASP.NET、JAVA跨服务器远程上传文件(图片)的相关解决方案整合
一.图片提交例: A端--提交图片 protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { string u ...
- 记一次FTP上传文件总是超时的解决过程
好久没写博,还是重拾记录一下吧. 背景:买了一个阿里云的云虚拟机用来搭建网站(起初不了解云虚拟主机和云服务器的区别,以为都是有SSH功能的,后来发现不是这样样子啊,云虚拟机就是FTP上传网页+MySQ ...
- WebView 上传文件 WebChromeClient之openFileChooser函数
原链接:http://blog.saymagic.cn/2015/11/08/webview-upload.html?utm_source=tuicool&utm_medium=referra ...
- CXF:通过WebService上传文件,包括大文件的处理
参考网上文章,用CXF发布上传文件接口,并上传大文件的测试. 框架:spring3.1+cxf2.7.6 1.定义文件类实体 import javax.activation.DataHandler; ...
- Java 上传文件到 SFTP 抛异常 java.lang.NoClassDefFoundError: Could not initialize class sun.security.ec.SunEC 的解决办法
最近从 Op 那里报来一个问题,说是SFTP上传文件不成功.拿到的 Exception 如下: Caused by: java.lang.NoClassDefFoundError: Could not ...
- WP8_(windows phone环境下)上传文件从C#到php接口
在windows phone环境下,将手机上的图片上传到服务端(php环境): 注意事项:在上传的地方,头文件中name,例如name= img,则在php服务端处理时 ,需要约定好 存取一致 php ...
- winform 上传文件
using System; using System.Collections.Generic; using System.Text; using System.Net; using System.IO ...
- github上传文件
说来也惭愧,我是最近开始用github,小白一个,昨天研究了一个下午.终于可以上传了,所以今天写点,一来分享是自己的一些经验,二来也是做个记录,万一哪天又不记得了:) 废话不多说,直接来,这次主要介绍 ...
随机推荐
- MinIO简介和java Api的使用
本文出自jvm123.com-java技术分享站:http://jvm123.com/2020/02/minio-jian-jie-java-api.html MinIO是一个对象存储服务,非常轻量, ...
- HEAAN新版学习
本篇文章对最新版的HEAAN库进行研究,老版的介绍见 HEAAN库学习 主要参考:slide-HEAAN.pdf HEAAN介绍 HEAAN是一个支持在加密的复数数组之间进行操作的库,方案的安全性取决 ...
- Ansible playbook实现apache批量部署,并对不同主机提供以各自IP地址为内容的index.html
1.基于key验证免密授权 1.1 生成kekgen # ssh-keygen Generating public/private rsa key pair. Enter file in which ...
- 流程控制( if while )
目录 流程控制 必知必会 分支结构 if 1.单 if 分支结构 2. if与else连用 3. if, else和 elif if 判断之嵌套 if 练习题 while 循环 while+break ...
- pytest--pytest基本介绍
pytest简介 pytest 是 python 的第三方单元测试框架,比自带的 unittest 更简洁和高 效,同时兼容 unittest 框架.它还有如下优点: 1.简单灵活,容易上手,文档丰富 ...
- 【C#特性】 Attribute 特性
msdn:https://docs.microsoft.com/zh-cn/dotnet/csharp/programming-guide/concepts/attributes/creating-c ...
- Windows操作下各种工具常用快捷键
目录 Windows快捷键 谷歌浏览器快捷键 Nodepad++快捷键 Mobaxterm快捷键 Markdown快捷键 Windows快捷键 Win + E打开文件系统 Win + L锁屏 谷歌浏览 ...
- linux 下面启动nginx 和关闭nginx
linux 下面启动nginx 和关闭nginx, 查看linux 开放的所有端口netstat -ntpl,重启服务命令 :service network restart 1 进入到安装的目录里面 ...
- Qt:QListWidget
0.说明 QListWidget指明一个基于Item的List Widget. 构造 QListWidget与QListView类似,都可以显示一列Item,区别在于前者可以往其中增删Item. QL ...
- Leaflet:Path、Polyline、Polygon、Rectangle、Circle、CircleMarker
下边介绍Vector Layer Path(Layer) Path是其他Vector Layer的父类,比如Polyline.Polygon.Rectangle.Circle.CircleMarker ...