Gin框架 静态文件&上传文件

1,419 阅读1分钟

一、静态文件

在工程目录下创建Assets文件夹,放入一些图片,如下

root@ubuntu:/SuperxonWebSite# tree
.
├── assets
│   ├── golang.jpeg
│   ├── favicon.ico
│   └── img
│       └── web后端.png
└── mian.go

静态文件是指服务器上的静态资源,如音频、图片、文本、脚本等等,为了让静态文件可以被用户直接访问,Gin框架有三种函数实现:

package main

import (
   "github.com/gin-gonic/gin"
)

func main() {
   r := gin.Default()
   
   // ①
   r.Static("/assets", "./assets") 
   // ②
   //r.StaticFS("/assets", http.Dir("assets")) 
   // ③
   r.StaticFile("/favicon.ico", "./assets/favicon.ico")
   
   r.Run(":8080")
}

①.访问http://localhost:8080/assets/golang.jpeg,就能访问到golang.jpeg;它能够用来访问assets文件下的所有文件;

②.同①的功能类似,但是有个特别的功能就是访问http://localhost:8080/assets/img/时,能够直接展示出img下的所有文件;

③.访问http://localhost:8080/favicon.ico,能直接访问到相应文件,

二、上传文件

上传单个文件

package main

import (
   "fmt"
   "github.com/gin-gonic/gin"
   "net/http"
)

func main() {
   r := gin.Default()
   r.POST("/upload_one", func(c *gin.Context) {
      file, err := c.FormFile("test_file")
      if err != nil {
         c.JSON(http.StatusInternalServerError, gin.H{
            "message": err.Error(),
         })
         return
      }

      fmt.Println(file.Filename)
      // 上传文件到指定的目录
      _ = c.SaveUploadedFile(file, "./assets/"+file.Filename)
      c.JSON(http.StatusOK, gin.H{
         "message": fmt.Sprintf("'%s' upload success.", file.Filename),
      })
   })
   _ = r.Run(":8080")
}

上传文件做测试可以通过postman进行,成功之后可以看到assets文件夹下多了上传的文件

上传单个文件.png

上传多个文件

和单个文件类似,用MultipartForm提前做个处理,postman中选择多个文件

func main() {
   r := gin.Default()
   r.POST("/upload_files", func(c *gin.Context) {
      // 单个文件
      form, _ := c.MultipartForm()
      files := form.File["test_files"]

      for _, file := range files {
         // 上传文件到指定的目录
         _ = c.SaveUploadedFile(file, "./assets/"+ file.Filename)
      }

      c.JSON(http.StatusOK, gin.H{
         "message": fmt.Sprintf("files upload success."),
      })
   })
   _ = r.Run(":8080")
}