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,小白一个,昨天研究了一个下午.终于可以上传了,所以今天写点,一来分享是自己的一些经验,二来也是做个记录,万一哪天又不记得了:) 废话不多说,直接来,这次主要介绍 ...
随机推荐
- oracle修改密码、添加用户及授权
解锁某个用户 sqlplus/as sysdba; alter user scott account unlock; 忘记密码处理 登录:sqlplus/as sysdba;修改:alter user ...
- fiddler模拟2
在解决日常的支持需求中,经常会遇到一些用户反馈一些无法简单复现的bug,有很大一部分的bug是由于用户自身的网络环境波动,或者是本身网络环境就较为恶劣,而服务在面对这种恶劣的网络环境的健壮性不够,导致 ...
- 十年OI一场空,不开long long见祖宗
//线段树:单点修改+区间求和 #include<bits/stdc++.h> #define ll unsigned long long using namespace std; ll ...
- 通过JAVA对FTP服务器连接,上传,下载,读取,移动文件等
记录一次对FTP服务器文件内容 通过Java程序对FTP服务器文件处理:连接,上传,下载,读取,移动文件等. 需求描述:今天接到一个任务,在Java项目中,读取FTP服务器上的一些文件,进行一些业务操 ...
- C# 实例解释面向对象编程中的里氏替换原则
在面向对象编程中,SOLID 是五个设计原则的首字母缩写,旨在使软件设计更易于理解.灵活和可维护.这些原则是由美国软件工程师和讲师罗伯特·C·马丁(Robert Cecil Martin)提出的许多原 ...
- 关于Untiy破解 for Mac
Mac的破解很简单 也很坑 如果你破解过win的 在进行Mac版的破解 可能认为三观都被颠覆了 以下进行下讲解 并且帮助大家排除坑 还是那句话 有条件的请支持正版 破解版只进行技术分享 第一步去u ...
- 【基础篇】js对本地文件增删改查--删
前置条件: 1. 本地有安装node,点击传送门 项目目录: 1. msg.json内容 { "data": [ { "id": 1, "name&q ...
- 为什么用Python,高级的Python是一种高级编程语言
Python特性 如果有人问我Python最大的特点是什么,我会毫不犹豫地告诉他:它简单易学,功能强大.作为一个纯自由软件,Python有许多优点: 很简单.基于"优雅".&quo ...
- 【C# 线程】线程局部存储(TLS)理论部分 ThreadStatic|LocalDataStoreSlot|ThreadLocal<T>
线程本地存储(TLS:Thread Local Storage) 线程本地存储(Thread Local Storage),字面意思就是专属某个线程的存储空间.变量大体上分为全局变量和局部变量,一个进 ...
- 执行上下文与同步上下文 | ExecutionContext 和 SynchronizationContext
原文连接:执行上下文与同步上下文 - .NET 并行编程 (microsoft.com) 执行上下文与同步上下文 斯蒂芬 6月15日, 2012 最近,我被问了几次关于 ExecutionContex ...