• Gin-Go学习笔记四:Gin-Web框架 文件的上传下载


    文件的上传和下载

    1->文件的上传

    文件的上传,采用的是uploadify.js这个插件.

    本事例实现的是上传图片文件,其他的文件上传也一样。

    2->文件的下载

    文件的下载有两个实现的方式:

    1->url路径指向文件的路径,浏览器自行下载。但此方法存在缺陷:图片文件,text,pdf等文件会在浏览器中自动显示,不会执行下载功能

    2->使用gin 暂时没带有的下载方法

    3>新建一个fileopt.go控制器,具体代码如下:

      

    package controllers
    
    import (
    	"io"
    	"log"
    	"os"
    	"fmt"
    	"github.com/gin-gonic/gin"
    	"net/http"
    )
    /**文件上传下载操作页面**/
    func Fileopthtml(c *gin.Context){
    	c.HTML(http.StatusOK, "fileopt.html", gin.H{
    		"title": "GIN: 文件上传下载操作布局页面",
    	})
    }
    
    /**上传方法**/
    func Fileupload(c *gin.Context){
    	//得到上传的文件
    	file, header, err := c.Request.FormFile("image") //image这个是uplaodify参数定义中的   'fileObjName':'image'
    	if err != nil {
    		c.String(http.StatusBadRequest, "Bad request")
    		return
    	}
    	//文件的名称
    	filename := header.Filename
    
    	fmt.Println(file, err, filename)
        //创建文件 
    	out, err := os.Create("static/uploadfile/"+filename)
    	//注意此处的 static/uploadfile/ 不是/static/uploadfile/
    	if err != nil {
    		log.Fatal(err)
    	}
    	defer out.Close()
    	_, err = io.Copy(out, file)
    	if err != nil {
    		log.Fatal(err)
    	}
    	c.String(http.StatusCreated, "upload successful")
    }
    
    /**下载方法**/
    func Filedown(c *gin.Context){
    	//暂时没有提供方法
    }
    

      

    4>新建一个html页面,名为fileopt.html,其代码如下:

     

    <!DOCTYPE html>
     
    <html>
          <head>
            <title>首页 - 用户列表页面</title>
            <link rel="shortcut icon" href="/static/img/favicon.png" /> 
            <link rel="stylesheet" href="/static/uploadify/uploadify.css" rel="stylesheet"/>
            <script type="text/javascript" src="/static/js/jquery-2.1.1.min.js"></script> 
            <script src="/static/uploadify/jquery.uploadify.min.js"></script>
          </head>       
        <body>
            <!--上传部分-->
            <form method="POST" action="/Home/UploadFile" enctype="multipart/form-data">   
                <input type="file" name="image" id="file_upload">
                <div id="imgdiv" style="display:none;">
    
                </div>
                
            </form>
            <!--下载图片-->
            <button value="下载图片" onclick="download()">下载图片</button>
            <!--JS部分-->
           <script type="text/javascript">
             
            //页面的初始化
            $(function () {
                $("#file_upload").uploadify({       //绑定元素      
                'fileObjName':'image',//html input标签的name属性的值吧。                 
                'debug':false,                  
                'auto':true,    //自动上传 
                'multi':true,
                'removeCompleted':false, //上传完成以后是否保存进度条            
                'buttonText':'选择文件',                                     
                'cancelImg':'/static/uploadify/uploadify-cancel.png',                   
                'swf':'/static/uploadify/uploadify.swf', //必须设置  swf文件路径             
                'uploader':'/home/fileuplaod',         //必须设置,上传文件触发的url       
                'fileTypeDesc':'FileType',                  
                'fileTypeExts':'*.jpg;*.jpge;*.gif;*.png;',          
                'multi':true,  
                'onUploadSuccess': function (file, data, response) {
                   $("#imgdiv").show();
                   var html='<image src="/static/uploadfile/'+file.name+'" style="height:150px;150px;margin:20px;"/>';
                   $("#imgdiv").append(html);
                }             
              });         
               
            });
            //下载图片
            function download(){
              //暂时没有提供后台的方法
              //gin暂时没有实现下载方法
              //只有使用url
              window.location.href="/static/img/1.jpg";
            }
      </script>
     </body>
    </html>
    

      

    5>在路由中添加路由

    package routers
    
    import (
      "github.com/gin-gonic/gin"
      . "GinLearn/GinLearn/apis" //api部分
      . "GinLearn/GinLearn/controllers" //constroller部分
     )
     
    func InitRouter() *gin.Engine{
      router := gin.Default()
      //Hello World
      router.GET("/", IndexApi)
      //渲染html页面
      router.LoadHTMLGlob("views/*")
      router.GET("/home/index", ShowHtmlPage)
      //列表页面
      router.GET("/home/list", ListHtml)
      router.POST("/home/PageData", GetDataList)
      router.POST("/home/PageNextData", PageNextData)
    
      //新增页面
      router.GET("/home/add", AddHtml)
      router.POST("/home/saveadd", AddPersonApi)
      
       //编辑页面
       router.GET("/home/edit", EditHtml)
       router.POST("/home/saveedit", EditPersonApi)
    
        //删除
        router.POST("/home/delete", DeletePersonApi)
    
        //Bootstrap布局页面
        router.GET("/home/bootstrap", Bootstraphtml)
    
        //文件的上传和下载 
        router.GET("/home/fileopt", Fileopthtml)
        router.POST("/home/fileuplaod", Fileupload)
        router.GET("/home/filedown", Filedown)
        
        return router
     }
     
    

      

    6>项目的结构如下:

     

    7>执行的效果如下:

    1->文件操作的页面如下,路由如下:

     

    2->点击选择文件按钮,选择需要上传的图片,点击打开按钮,效果如下:

     

    3->点击下载图片按钮,浏览器下载一张指定的图片

     

    8>下一章,将文件内容的读取。

  • 相关阅读:
    Angular 学习笔记(四)
    Angular 学习笔记(三)
    Angular 学习笔记(二)
    Angular 学习笔记(一)
    ettercap + driftnet 实现同网段下流量欺骗
    kali 下使用 arpspoof 实现断网攻击
    JavaScript 语句
    vscode配置git及码云
    区块链入门
    C#情怀与未来
  • 原文地址:https://www.cnblogs.com/tudaogaoyang/p/8073841.html
Copyright © 2020-2023  润新知