Skip to content

Commit

Permalink
添加文件夹上传
Browse files Browse the repository at this point in the history
  • Loading branch information
huoxue1 committed Oct 1, 2022
1 parent f47d0bd commit 0663d16
Show file tree
Hide file tree
Showing 41 changed files with 644 additions and 133 deletions.
5 changes: 3 additions & 2 deletions controller/AdminController.go
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,8 @@ func RemoveFile() gin.HandlerFunc {
session.Rollback()
return
}
err = os.Remove("./work/" + work.Name + "/" + file.FileName)

err = os.RemoveAll("./work/" + work.Name + "/" + file.FileName)
if err != nil {
session.Rollback()
return
Expand Down Expand Up @@ -145,7 +146,7 @@ func GetZipResult() gin.HandlerFunc {
if err != nil {
return
}
err = util.Zip("./work/"+work.Name+"/", "./temp/"+work.Name+".zip")
err = util.Compress("./work/"+work.Name+"/", "./temp/"+work.Name+".zip")
if err != nil {
return
}
Expand Down
209 changes: 154 additions & 55 deletions controller/controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@ package controller

import (
"fmt"
"os"
"path/filepath"
"strconv"
"strings"

"github.com/gin-gonic/gin"
log "github.com/sirupsen/logrus"
Expand All @@ -20,75 +23,162 @@ func SetToken(token string) {
TOKEN = token
}

// Upload
/**
* @Description: 上传文件
* @return gin.HandlerFunc
*/
func Upload() gin.HandlerFunc {
return func(context *gin.Context) {
p := new(pojo.Files)
file, _ := context.FormFile("file")
tempID, _ := context.GetPostForm("work_id")
workId, _ := strconv.Atoi(tempID)
token, _ := context.GetPostForm("token")
p.WorkID = workId
p.Size = file.Size
p.FileName = file.Filename
p.Token = token
db := dao.GetDB()
p2 := new(pojo.Files)
session := db.NewSession()
defer session.Close()
defer func() {
err := recover()
if err != nil {
_ = session.Rollback()
}
}()
exist, err := session.Where("work_id=? and file_name=?", p.WorkID, p.FileName).Exist(p2)
if exist {
_, err := session.Where("work_id=? and file_name=?", p.WorkID, p.FileName).Get(p2)
if err != nil {
session.Rollback()
return
}
_, err = session.ID(p2.Id).Update(p)
if err != nil {
session.Rollback()
log.Errorln(err.Error())
return
}
} else {
_, err = session.Insert(p)
if err != nil {
session.Rollback()
return
}
func uploadFile(context *gin.Context) {
p := new(pojo.Files)
file, _ := context.FormFile("file")
tempID, _ := context.GetPostForm("work_id")
workId, _ := strconv.Atoi(tempID)
token, _ := context.GetPostForm("token")
p.WorkID = workId
p.Size = file.Size
p.FileName = file.Filename
p.Token = token
db := dao.GetDB()
p2 := new(pojo.Files)
session := db.NewSession()
defer session.Close()
defer func() {
err := recover()
if err != nil {
_ = session.Rollback()
}

w := new(pojo.Work)
_, err = session.ID(p.WorkID).Get(w)
}()
exist, err := session.Where("work_id=? and file_name=?", p.WorkID, p.FileName).Exist(p2)
if exist {
_, err := session.Where("work_id=? and file_name=?", p.WorkID, p.FileName).Get(p2)
if err != nil {
session.Rollback()
return
}
_, err = session.ID(p2.Id).Update(p)
if err != nil {
session.Rollback()
log.Errorln(err.Error())
return
}
} else {
_, err = session.Insert(p)
if err != nil {
session.Rollback()
return
}
}

w := new(pojo.Work)
_, err = session.ID(p.WorkID).Get(w)
if err != nil {
session.Rollback()
return
}

util.CheckDir("./work/" + w.Name + "/")
err = context.SaveUploadedFile(file, "./work/"+w.Name+"/"+p.FileName)
if err != nil {
context.JSON(403, ok(403, "文件保存失败"))
session.Rollback()
return
}

util.CheckDir("./work/" + w.Name + "/")
err = context.SaveUploadedFile(file, "./work/"+w.Name+"/"+p.FileName)
err = session.Commit()
if err != nil {
session.Rollback()
context.JSON(403, ok(403, "事务提交失败"))
return
}
context.JSON(200, ok(200, nil))
}

func uploadDir(context *gin.Context) {
p := new(pojo.Files)
form, _ := context.MultipartForm()
files := form.File["file"]
fileNames := strings.Split(context.PostForm("fileNames"), ",")
fileName := strings.Split(fileNames[0], "/")[0]
var fileSize int64 = 0
for i, file := range files {
fileSize += file.Size
file.Filename = fileNames[i]
}
tempID, _ := context.GetPostForm("work_id")
workId, _ := strconv.Atoi(tempID)
token, _ := context.GetPostForm("token")
p.WorkID = workId
p.Size = fileSize
p.FileName = fileName
p.Token = token
db := dao.GetDB()
p2 := new(pojo.Files)
session := db.NewSession()
defer session.Close()
defer func() {
err := recover()
if err != nil {
_ = session.Rollback()
}
}()
exist, err := session.Where("work_id=? and file_name=?", p.WorkID, p.FileName).Exist(p2)
if exist {
_, err := session.Where("work_id=? and file_name=?", p.WorkID, p.FileName).Get(p2)
if err != nil {
context.JSON(403, ok(403, "文件保存失败"))
session.Rollback()
return
}
_, err = session.ID(p2.Id).Update(p)
if err != nil {
session.Rollback()
log.Errorln(err.Error())
return
}
} else {
_, err = session.Insert(p)
if err != nil {
session.Rollback()
return
}
}

w := new(pojo.Work)
_, err = session.ID(p.WorkID).Get(w)
if err != nil {
session.Rollback()
return
}

err = session.Commit()
util.CheckDir("./work/" + w.Name + "/")
for _, file := range files {
s := "./work/" + w.Name + "/" + file.Filename
_ = os.MkdirAll(filepath.Dir(s), os.ModePerm)
err := context.SaveUploadedFile(file, s)
if err != nil {
context.JSON(403, ok(403, "文件保存失败"))
session.Rollback()
context.JSON(403, ok(403, "事务提交失败"))
return
}
context.JSON(200, ok(200, nil))
}

err = session.Commit()
if err != nil {
session.Rollback()
context.JSON(403, ok(403, "事务提交失败"))
return
}
context.JSON(200, ok(200, nil))
}

// Upload
/**
* @Description: 上传文件
* @return gin.HandlerFunc
*/
func Upload() gin.HandlerFunc {
return func(context *gin.Context) {
fileType, _ := context.GetPostForm("type")
if fileType == "file" {
uploadFile(context)
} else {
uploadDir(context)
}

}
}

Expand Down Expand Up @@ -154,7 +244,16 @@ func DownloadFile() gin.HandlerFunc {
return
}
ctx.Header("content-disposition", "attachment;filename="+file.FileName)
ctx.File(fmt.Sprintf("./work/%s/%s", work.Name, file.FileName))
path := fmt.Sprintf("./work/%s/%s", work.Name, file.FileName)
info, _ := os.Stat(path)
if info.IsDir() {
_ = util.Compress(path, "./temp/"+file.FileName+".zip")
ctx.File("./temp/" + file.FileName + ".zi[")
defer os.Remove("./temp/" + file.FileName + ".zip")
} else {
ctx.File(path)
}

}
}

Expand Down
1 change: 1 addition & 0 deletions router/view/dist/css/app.b1fffd53.css

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 0 additions & 1 deletion router/view/dist/css/app.dfc3b4df.css

This file was deleted.

1 change: 0 additions & 1 deletion router/view/dist/css/chunk-1325a8a1.64c3d364.css

This file was deleted.

1 change: 1 addition & 0 deletions router/view/dist/css/chunk-53ffdda4.c47db84a.css

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions router/view/dist/css/chunk-5962c860.945694dc.css

Large diffs are not rendered by default.

1 change: 1 addition & 0 deletions router/view/dist/css/chunk-vendors.604b1ac9.css

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion router/view/dist/home.html
Original file line number Diff line number Diff line change
@@ -1 +1 @@
<!DOCTYPE html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="/static/view/dist/favicon.ico"><title>work</title><link href="/static/view/dist/css/chunk-1325a8a1.64c3d364.css" rel="prefetch"><link href="/static/view/dist/css/chunk-3ca58b80.312f221c.css" rel="prefetch"><link href="/static/view/dist/js/chunk-0447b482.393a876a.js" rel="prefetch"><link href="/static/view/dist/js/chunk-1325a8a1.55acced1.js" rel="prefetch"><link href="/static/view/dist/js/chunk-3ca58b80.9c464def.js" rel="prefetch"><link href="/static/view/dist/css/app.dfc3b4df.css" rel="preload" as="style"><link href="/static/view/dist/js/app.864e9e05.js" rel="preload" as="script"><link href="/static/view/dist/js/chunk-vendors.2f83e229.js" rel="preload" as="script"><link href="/static/view/dist/css/app.dfc3b4df.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but work doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script src="/static/view/dist/js/chunk-vendors.2f83e229.js"></script><script src="/static/view/dist/js/app.864e9e05.js"></script></body></html>
<!DOCTYPE html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="/static/view/dist/favicon.ico"><title>work</title><link href="/static/view/dist/css/chunk-3ca41c2c.312f221c.css" rel="prefetch"><link href="/static/view/dist/css/chunk-53ffdda4.c47db84a.css" rel="prefetch"><link href="/static/view/dist/css/chunk-5962c860.945694dc.css" rel="prefetch"><link href="/static/view/dist/js/chunk-3ca41c2c.d12cc927.js" rel="prefetch"><link href="/static/view/dist/js/chunk-53ffdda4.75703314.js" rel="prefetch"><link href="/static/view/dist/js/chunk-573ad164.9fbad0f3.js" rel="prefetch"><link href="/static/view/dist/js/chunk-5962c860.4a560f8d.js" rel="prefetch"><link href="/static/view/dist/css/app.b1fffd53.css" rel="preload" as="style"><link href="/static/view/dist/css/chunk-vendors.604b1ac9.css" rel="preload" as="style"><link href="/static/view/dist/js/app.ffd75453.js" rel="preload" as="script"><link href="/static/view/dist/js/chunk-vendors.5edc7a07.js" rel="preload" as="script"><link href="/static/view/dist/css/chunk-vendors.604b1ac9.css" rel="stylesheet"><link href="/static/view/dist/css/app.b1fffd53.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but work doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script src="/static/view/dist/js/chunk-vendors.5edc7a07.js"></script><script src="/static/view/dist/js/app.ffd75453.js"></script></body></html>
Loading

0 comments on commit 0663d16

Please sign in to comment.