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>
    

      

  • 相关阅读:
    php 下设置cookie问题
    js 页面无滚动条添加滚轮事件
    Python中关于字符串的问题
    Python 字符串相加问题
    ajax 同步和异步
    重叠div鼠标经过事件
    Myeclipse中将项目上传到码云
    eclipse debug的时候提示debug Edit Source Lookup path
    阿里云+wordpress搭建个人博客网站
    centos7 安装mysql
  • 原文地址:https://www.cnblogs.com/yzg-14/p/13141932.html
Copyright © 2011-2022 走看看