| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- package router
- import (
- "demo/share"
- "errors"
- "fmt"
- "github.com/gin-gonic/gin"
- "github.com/spf13/cast"
- "os"
- "strings"
- "time"
- )
- var (
- uploadFileKey = "upload.bat-key"
- filepath = "./file/resources/"
- )
- func FileRouter(engine *gin.RouterGroup) {
- //文件静态资源,可以直接访问静态资源文件
- user := engine.Group("/file")
- {
- //文章上传
- //user.POST("/upload", uploadHandler)
- PushRouter(user, "POST", "/upload", uploadHandler)
- PushRouter(user, "POST", "/upload/type", UploadHandlerByType)
- PushRouter(user, "PUT", "", DeleteFile)
- }
- }
- // 文件上传
- func uploadHandler(c *gin.Context) {
- header, err := c.FormFile("file")
- fmt.Println("header", header.Size)
- if err != nil {
- c.JSON(200, CreateResultError(400, "上传错误"))
- return
- }
- fmt.Println("header", header.Size)
- //dst := header.Filename
- // gin 简单做了封装,拷贝了文件流
- //if err := c.SaveUploadedFile(header, dst); err != nil {
- // c.JSON(200, CreateResultError(400, "上传错误"))
- // return
- //}
- //上传到的路径
- //path := 'resource/public/uploads/20060102150405test.xlsx'
- header.Filename = fmt.Sprintf("%s%s", time.Now().Format("20060102150405"), header.Filename) // 文件名格式 自己可以改 建议保证唯一性
- path := filepath + header.Filename //路径+文件名上传
- // 上传文件到指定的目录
- err = c.SaveUploadedFile(header, path)
- if err != nil {
- err = errors.New(fmt.Sprintf("上传失败,%v", err))
- return
- }
- c.JSON(200, CreateResultData(map[string]interface{}{
- "url": "/api/static/" + header.Filename,
- }))
- }
- func UploadHandlerByType(c *gin.Context) {
- header, _ := c.FormFile("file")
- if header != nil {
- uploadHandler(c)
- return
- }
- header, _ = c.FormFile("image")
- if header != nil {
- //大于2M
- if header.Size > 1024*1024*2 {
- c.JSON(200, CreateResultError(400, "图片大小不能超过2M"))
- return
- }
- l := len(header.Filename)
- if strings.LastIndex(header.Filename, ".png") == l-4 ||
- strings.LastIndex(header.Filename, ".jpg") == l-4 ||
- strings.LastIndex(header.Filename, ".jpeg") == l-5 ||
- strings.LastIndex(header.Filename, ".gif") == l-4 {
- header.Filename = fmt.Sprintf("%s%s", time.Now().Format("20060102150405"), header.Filename) // 文件名格式 自己可以改 建议保证唯一性
- path := filepath + "image/" + header.Filename //路径+文件名上传
- // 上传文件到指定的目录
- err := c.SaveUploadedFile(header, path)
- if err != nil {
- err = errors.New(fmt.Sprintf("上传失败,%v", err))
- return
- }
- data := CreateResultData(map[string]interface{}{
- "url": "/api/static/image/" + header.Filename,
- })
- data["errno"] = 0
- c.JSON(200, data)
- } else {
- c.JSON(200, CreateResultError(400, "图片格式错误"))
- }
- return
- }
- header, _ = c.FormFile("video")
- if header != nil {
- if header.Size > 1024*1024*40 {
- c.JSON(200, CreateResultError(400, "视频大小不能超过40M"))
- return
- }
- l := len(header.Filename)
- if strings.LastIndex(header.Filename, ".mp4") == l-4 {
- header.Filename = fmt.Sprintf("%s%s", time.Now().Format("20060102150405"), header.Filename) // 文件名格式 自己可以改 建议保证唯一性
- path := filepath + "video/" + header.Filename //路径+文件名上传
- // 上传文件到指定的目录
- err := c.SaveUploadedFile(header, path)
- if err != nil {
- err = errors.New(fmt.Sprintf("上传失败,%v", err))
- return
- }
- data := CreateResultData(map[string]interface{}{
- "url": "/api/static/video/" + header.Filename,
- })
- data["errno"] = 0
- c.JSON(200, data)
- } else {
- c.JSON(200, CreateResultError(400, "视频格式错误"))
- }
- return
- }
- }
- // DeleteFile 文件上传
- func DeleteFile(c *gin.Context) {
- data := share.GetJsonAnyParam(c)
- fileUrl, _ := data("fileUrl")
- url := cast.ToString(fileUrl)
- if strings.Index(url, "/api/static/") != 0 {
- c.JSON(200, CreateResultError(400, "文件路径错误"))
- }
- url = strings.Replace(url, "/api/static/", "file/resources/", 1)
- s, err := os.Stat(url)
- if os.IsNotExist(err) {
- c.JSON(200, CreateResultError(400, "文件不存在"))
- return
- }
- if s.IsDir() {
- c.JSON(200, CreateResultError(400, "路径不存在"))
- return
- }
- err = os.Remove(url)
- if err != nil {
- c.JSON(200, CreateResultError(400, "删除失败"))
- return
- }
- c.JSON(200, CreateResult())
- }
|