单文件上传

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 上传文件的更多相关文章

  1. golang 上传文件(包括 gin 实现)

    golang web服务有时候需要提供上传文件的接口,以下就是具体示例.为了示例简单(吐槽下 golang 的错误处理), 忽略了所有的错误处理.本文会用两种方式(标准库和gin)详细讲解 golan ...

  2. ASP.NET、JAVA跨服务器远程上传文件(图片)的相关解决方案整合

    一.图片提交例: A端--提交图片 protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { string u ...

  3. 记一次FTP上传文件总是超时的解决过程

    好久没写博,还是重拾记录一下吧. 背景:买了一个阿里云的云虚拟机用来搭建网站(起初不了解云虚拟主机和云服务器的区别,以为都是有SSH功能的,后来发现不是这样样子啊,云虚拟机就是FTP上传网页+MySQ ...

  4. WebView 上传文件 WebChromeClient之openFileChooser函数

    原链接:http://blog.saymagic.cn/2015/11/08/webview-upload.html?utm_source=tuicool&utm_medium=referra ...

  5. CXF:通过WebService上传文件,包括大文件的处理

    参考网上文章,用CXF发布上传文件接口,并上传大文件的测试. 框架:spring3.1+cxf2.7.6 1.定义文件类实体 import javax.activation.DataHandler; ...

  6. Java 上传文件到 SFTP 抛异常 java.lang.NoClassDefFoundError: Could not initialize class sun.security.ec.SunEC 的解决办法

    最近从 Op 那里报来一个问题,说是SFTP上传文件不成功.拿到的 Exception 如下: Caused by: java.lang.NoClassDefFoundError: Could not ...

  7. WP8_(windows phone环境下)上传文件从C#到php接口

    在windows phone环境下,将手机上的图片上传到服务端(php环境): 注意事项:在上传的地方,头文件中name,例如name= img,则在php服务端处理时 ,需要约定好 存取一致 php ...

  8. winform 上传文件

    using System; using System.Collections.Generic; using System.Text; using System.Net; using System.IO ...

  9. github上传文件

    说来也惭愧,我是最近开始用github,小白一个,昨天研究了一个下午.终于可以上传了,所以今天写点,一来分享是自己的一些经验,二来也是做个记录,万一哪天又不记得了:) 废话不多说,直接来,这次主要介绍 ...

随机推荐

  1. Redis的配置文件redis.conf详解

    Redis的配置文件位于redis的安装目录下,一般不要直接操作出厂设置的配置文件,需要对其进行备份.# Redis的配置文件样例: # Redis configuration file exampl ...

  2. Velocity学习

    原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11790482.html Velocity学习: 1. velocity对大小写敏感 2. ve ...

  3. VMware15.5虚拟机安装及LInux系统安装前 准备工作

    VMware15.5虚拟机安装及Linux系统安装前 准备工作 一.vmware15.5安装 1.安装环境准备 1.vmware15.5版本和秘钥(版本资源和密钥小白已经上传到资源文档里面,要想下载可 ...

  4. 8、Linux基础--rpm、yum、yum私有仓库、系统优化

    笔记 1.晨考 1.文件的三种时间属性,每一种时间属性在什么情况下改变 atime : 访问时间 mtime :修改时间 ctime :修改属性时间 2.权限的类型 可读(r, 4) 可写(w, 2) ...

  5. opencv笔记---contours

    一 Contour Finding Contours使用 STL-style vector<> 表示,如 vector<cv::Point>, vector<cv::Po ...

  6. iptTable规范

    规范之HTML 先在当前页面放入几个表格设置按钮的html(样式可能需重新调整) <div class="bottom_nav1 ta_l" style="padd ...

  7. ServiceStack.Redis的源码分析(连接与连接池)

    前几天在生产环境上redis创建连接方面的故障,分析过程中对ServiceStack.Redis的连接创建和连接池机制有了进一步了解.问题分析结束后,通过此文系统的将学习到的知识点整理出来. 从连接池 ...

  8. VS2019下配置OpenGL全过程

    一:下载VS2019 官网下载社区版 二:下载GLEW.GLFW 百度网盘地址: 链接:https://pan.baidu.com/s/1Uvz9svdnVRvDXNHjVgApig 提取码:rsgp ...

  9. 渗透测试工具篇之目录扫描工具dirmap

    (一)dirmap介绍 一个高级web目录扫描工具,功能将会强于DirBuster.Dirsearch.cansina.御剑 (二)dirmap安装 打开浏览器输入https://github.com ...

  10. [自动化]基于kolla的自动化部署ceph集群

    kolla-ceph来源: 项目中的部分代码来自于kolla和kolla-ansible kolla-ceph的介绍: 1.镜像的构建很方便, 基于容器的方式部署,创建.删除方便 2.kolla-ce ...