zoukankan      html  css  js  c++  java
  • 上传文件

    1. 上传单个文件

    multipart/form-data格式用于文件上传。

    gin文件上传与原生的net/http方法类似,不同在于gin把原生的request封装到c.Request中。

    func main() {
        r := gin.Default()
        //限制上传最大尺寸
        r.MaxMultipartMemory = 8 << 20 //8M
        r.POST("/upload", func(c *gin.Context) {
            file, err := c.FormFile("file")
            if err != nil {
                c.String(500, "上传图片出错")
            }
            /*
               也可以直接使用io操作,拷贝文件数据。
               out, err := os.Create(filename)
               defer out.Close()
               _, err = io.Copy(out, file)
            */
            // c.JSON(200, gin.H{"message": file.Header.Context})
            c.SaveUploadedFile(file, file.Filename)
            c.String(http.StatusOK, file.Filename)
        })
        r.Run()
    }
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
    </head>
    <body>
    <form action="http://127.0.0.1:8080/post?id=1234&page=1 HTTP/1.1" method="post" action="application/x-www-form-urlencoded">
        用户名:<input type="text" name="name" placeholder="请输入你的用户名">  <br>
        密   码:<input type="password" name="message" placeholder="请输入你的密码">  <br>
        <input type="submit" value="提交">
    </form>
    </body>
    </html>

    2. 上传多个文件

    所谓多个文件,无非就是多一次遍历文件,然后一次copy数据存储即可。

    与单个文件上传类似,只不过使用了c.Request.MultipartForm得到文件句柄,再获取文件数据,然后遍历读写。

    func main() {
      
        // 默认使用了2个中间件Logger(), Recovery()
        r := gin.Default()
        // 限制表单上传大小 8MB,默认为32MB
        r.MaxMultipartMemory = 8 << 20
        r.POST("/upload", func(c *gin.Context) {
            form, err := c.MultipartForm()
            if err != nil {
                c.String(http.StatusBadRequest, fmt.Sprintf("get err %s", err.Error()))
            }
            // 获取所有图片
            files := form.File["files"]
            // 遍历所有图片
            for _, file := range files {
                // 逐个存
                if err := c.SaveUploadedFile(file, file.Filename); err != nil {
                    c.String(http.StatusBadRequest, fmt.Sprintf("upload err %s", err.Error()))
                    return
                }
            }
            c.String(200, fmt.Sprintf("upload ok %d files", len(files)))
        })
        //默认端口号是8080
        r.Run(":8000")
    }
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Document</title>
    </head>
    <body>
    <form action="http://localhost:8000/upload" method="post" enctype="multipart/form-data">
        上传文件:<input type="file" name="files" multiple>
        <input type="submit" value="提交">
    </form>
    </body>
    </html>
    

      

  • 相关阅读:
    简单例子windows 共享内存 Demo -----(一)
    Qt qss浅析
    基于EntityFramework的权限的配置和验证
    快速获取Windows系统上的国家和地区信息
    Scorm 1.2 开发文档
    SQL Server 联表字段合并查询
    解决 ko mapping 数组无法添加新对象的问题
    SQL Server 数据库初始化准备脚本
    妾心如水,良人不来
    有趣的格子效果
  • 原文地址:https://www.cnblogs.com/yzg-14/p/13141932.html
Copyright © 2011-2022 走看看