Browse Source

修改死锁的bug

MokiBox 1 year ago
parent
commit
dab5ec662e
11 changed files with 243 additions and 180 deletions
  1. 35 0
      Dockerfile
  2. 5 4
      main.go
  3. 6 8
      src/auth.go
  4. 148 153
      src/httpHandles.go
  5. 23 15
      src/units.go
  6. 4 0
      static/assets/index-CBECYGe7.js
  7. 0 0
      static/assets/index-D-iOwvCH.css
  8. 3 0
      static/file_ico.svg
  9. 3 0
      static/icon.svg
  10. 14 0
      static/index.html
  11. 2 0
      static/qr_code_ico.svg

+ 35 - 0
Dockerfile

@@ -0,0 +1,35 @@
+# 第一阶段: 构建阶段
+FROM golang:1.20-alpine AS builder
+
+# 设置工作目录
+WORKDIR /app
+
+# 复制 go.mod 和 go.sum 文件
+COPY go.mod go.sum ./
+
+# 下载依赖
+RUN go mod download
+
+# 复制源代码
+COPY . .
+
+# 构建 Go 应用程序
+RUN go build -o myapp .
+
+# 第二阶段: 运行阶段
+FROM alpine:latest
+
+# 设置工作目录
+WORKDIR /root/
+
+# 复制从构建阶段生成的可执行文件到运行阶段
+COPY --from=builder /app/myapp .
+
+# 复制静态文件到运行阶段
+COPY --from=builder /app/static ./static
+
+# 公开服务端口 (如果需要)
+EXPOSE 8800
+
+# 运行应用程序
+CMD ["./myapp"]

+ 5 - 4
main.go

@@ -1,7 +1,7 @@
 package main
 package main
 
 
 import (
 import (
-	"fmt"
+	"github.com/sirupsen/logrus"
 	"httpServer/src"
 	"httpServer/src"
 	"net/http"
 	"net/http"
 )
 )
@@ -14,11 +14,12 @@ func main() {
 	mux.HandleFunc("/upload", src.HandleUploadRequest)
 	mux.HandleFunc("/upload", src.HandleUploadRequest)
 	mux.HandleFunc("/createDir", src.HandleMkdirRequest)
 	mux.HandleFunc("/createDir", src.HandleMkdirRequest)
 	mux.HandleFunc("/base", src.HandleBaseRequest)
 	mux.HandleFunc("/base", src.HandleBaseRequest)
-	mux.Handle("/", http.FileServer(http.Dir("D:\\Project\\vue\\http-server\\dist")))
+	mux.Handle("/", http.FileServer(http.Dir("./static")))
 	mux.HandleFunc("/setCookie", src.HandleLoginRequest)
 	mux.HandleFunc("/setCookie", src.HandleLoginRequest)
-	fmt.Println("Server listening on port 8800...")
+	logrus.Info("欢迎使用Moki-HttpServer服务器!")
+	logrus.Info("服务已启动, 并开始监听端口8800...")
 	if err := http.ListenAndServe(":8800", mux); err != nil {
 	if err := http.ListenAndServe(":8800", mux); err != nil {
-		fmt.Println(err)
+		logrus.Error("启动发生异常, 异常为: ", err)
 	}
 	}
 
 
 }
 }

+ 6 - 8
src/auth.go

@@ -22,9 +22,7 @@ var (
 
 
 // 验证cookie中密钥是否正取
 // 验证cookie中密钥是否正取
 func authToCookie(cookie *http.Cookie) error {
 func authToCookie(cookie *http.Cookie) error {
-	mu.Lock()
 	if authCode == "" {
 	if authCode == "" {
-		defer mu.Unlock()
 		logrus.Warning("cookie验证, 验证密码未设置!")
 		logrus.Warning("cookie验证, 验证密码未设置!")
 		return nil
 		return nil
 	}
 	}
@@ -32,36 +30,36 @@ func authToCookie(cookie *http.Cookie) error {
 		logrus.Error("cookie验证, cookie为空!")
 		logrus.Error("cookie验证, cookie为空!")
 		return errors.New("未验证, 请先进行验证! ")
 		return errors.New("未验证, 请先进行验证! ")
 	}
 	}
-	defer mu.Unlock()
 	sessionId := cookie.Value
 	sessionId := cookie.Value
 	sessionTime := sessionStore[sessionId]
 	sessionTime := sessionStore[sessionId]
 	// 判断是否过期
 	// 判断是否过期
 	if sessionTime.Add(sessionTimeout).Before(time.Now()) {
 	if sessionTime.Add(sessionTimeout).Before(time.Now()) {
+		mu.Lock()
+		defer mu.Unlock()
 		delete(sessionStore, sessionId)
 		delete(sessionStore, sessionId)
 		logrus.Error("cookie验证, session已经过期!")
 		logrus.Error("cookie验证, session已经过期!")
 		return errors.New("验证已过期, 请重新验证! ")
 		return errors.New("验证已过期, 请重新验证! ")
 	}
 	}
-	logrus.Error("cookie验证, 验证通过!")
+	logrus.Info("cookie验证, 验证通过!")
 	return nil
 	return nil
 }
 }
 
 
 // 验证密码并下发cookie
 // 验证密码并下发cookie
 func authToCode(valAuthCode string, now time.Time) (*http.Cookie, error) {
 func authToCode(valAuthCode string, now time.Time) (*http.Cookie, error) {
-	mu.Lock()
 	if authCode == "" {
 	if authCode == "" {
-		defer mu.Unlock()
 		logrus.Warning("密码验证, 验证密码未设置!")
 		logrus.Warning("密码验证, 验证密码未设置!")
 		return nil, nil
 		return nil, nil
 	}
 	}
 	if valAuthCode == generateHash(authCode, -1) {
 	if valAuthCode == generateHash(authCode, -1) {
 		id := generateSessionID()
 		id := generateSessionID()
-		sessionStore[id] = now
+		pathMd5 := generateHash(authCode+strconv.FormatInt(now.Unix(), 10), 8)
 		cookie := &http.Cookie{
 		cookie := &http.Cookie{
 			Name:  "session_id",
 			Name:  "session_id",
 			Value: id,
 			Value: id,
 		}
 		}
-		pathMd5 := generateHash(authCode+strconv.FormatInt(now.Unix(), 10), 8)
+		mu.Lock()
 		defer mu.Unlock()
 		defer mu.Unlock()
+		sessionStore[id] = now
 		pathMd5Store[pathMd5] = "saved"
 		pathMd5Store[pathMd5] = "saved"
 		logrus.Info("密码验证, 验证已通过! ")
 		logrus.Info("密码验证, 验证已通过! ")
 		return cookie, nil
 		return cookie, nil

+ 148 - 153
src/httpHandles.go

@@ -1,9 +1,7 @@
 package src
 package src
 
 
 import (
 import (
-	"encoding/json"
 	"errors"
 	"errors"
-	"fmt"
 	"github.com/sirupsen/logrus"
 	"github.com/sirupsen/logrus"
 	"io"
 	"io"
 	"mime/multipart"
 	"mime/multipart"
@@ -20,7 +18,7 @@ import (
 var (
 var (
 	dir         = os.Getenv("FILE_PATH")               // 文件根路径
 	dir         = os.Getenv("FILE_PATH")               // 文件根路径
 	title       = os.Getenv("TITLE")                   // 标题
 	title       = os.Getenv("TITLE")                   // 标题
-	isUpload    = os.Getenv("IS_UPDATE") == "true"     // 是否开启上传
+	isUpload    = os.Getenv("IS_UPLOAD") == "true"     // 是否开启上传
 	isDelete    = os.Getenv("IS_DELETE") == "true"     // 是否开启删除
 	isDelete    = os.Getenv("IS_DELETE") == "true"     // 是否开启删除
 	isMkdir     = os.Getenv("IS_MKDIR") == "true"      // 是否开启创建文件夹
 	isMkdir     = os.Getenv("IS_MKDIR") == "true"      // 是否开启创建文件夹
 	showHidden  = os.Getenv("SHOW_HIDDEN") == ""       // 是否默认显示隐藏文件
 	showHidden  = os.Getenv("SHOW_HIDDEN") == ""       // 是否默认显示隐藏文件
@@ -35,7 +33,7 @@ func HandleBaseRequest(w http.ResponseWriter, r *http.Request) {
 	if err != nil {
 	if err != nil {
 		_, err = w.Write(resultError(-3, err))
 		_, err = w.Write(resultError(-3, err))
 		if err != nil {
 		if err != nil {
-			logrus.Error("基本查询发生异常,异常为: ", err.Error())
+			logrus.Error("基本查询发生异常,异常为: ", err)
 		}
 		}
 		return
 		return
 	}
 	}
@@ -55,7 +53,8 @@ func HandleBaseRequest(w http.ResponseWriter, r *http.Request) {
 	// 返回基础设置数据
 	// 返回基础设置数据
 	_, err = w.Write(resultSuccess(resultData))
 	_, err = w.Write(resultSuccess(resultData))
 	if err != nil {
 	if err != nil {
-		logrus.Error("基本查询发生异常,异常为: ", err.Error())
+		logrus.Error("基本查询发生异常,异常为: ", err)
+		return
 	}
 	}
 	logrus.Info("基本查询方法执行成功!")
 	logrus.Info("基本查询方法执行成功!")
 }
 }
@@ -72,7 +71,7 @@ func HandleLoginRequest(w http.ResponseWriter, r *http.Request) {
 	if err != nil {
 	if err != nil {
 		_, err = w.Write(resultError(-3, err))
 		_, err = w.Write(resultError(-3, err))
 		if err != nil {
 		if err != nil {
-			logrus.Error("登录发生异常,异常为: ", err.Error())
+			logrus.Error("登录发生异常,异常为: ", err)
 		}
 		}
 		return
 		return
 	}
 	}
@@ -81,9 +80,10 @@ func HandleLoginRequest(w http.ResponseWriter, r *http.Request) {
 	http.SetCookie(w, cookie)
 	http.SetCookie(w, cookie)
 	_, err = w.Write(resultSuccess(now.Unix()))
 	_, err = w.Write(resultSuccess(now.Unix()))
 	if err != nil {
 	if err != nil {
-		logrus.Error("登录发生异常,异常为: ", err.Error())
+		logrus.Error("登录发生异常,异常为: ", err)
+		return
 	}
 	}
-	logrus.Error("登录方法执行成功!")
+	logrus.Info("登录方法执行成功!")
 }
 }
 
 
 // HandleQueryRequest 查询文件
 // HandleQueryRequest 查询文件
@@ -94,101 +94,107 @@ func HandleQueryRequest(w http.ResponseWriter, r *http.Request) {
 	if err != nil {
 	if err != nil {
 		_, err = w.Write(resultError(-3, err))
 		_, err = w.Write(resultError(-3, err))
 		if err != nil {
 		if err != nil {
-			logrus.Error("文件查询发生异常, 异常为: ", err.Error())
+			logrus.Error("文件查询发生异常, 异常为: ", err)
 		}
 		}
 		return
 		return
 	}
 	}
 
 
 	// 获取参数, 初始化目录
 	// 获取参数, 初始化目录
-	localDir := dir
+	localDir := strings.ReplaceAll(dir, "\\", "/")
 	query := r.URL.Query()
 	query := r.URL.Query()
 	filePath := query.Get("filePath")
 	filePath := query.Get("filePath")
 	localDir = filepath.Join(localDir, filePath)
 	localDir = filepath.Join(localDir, filePath)
 	showHidden, _ = strconv.ParseBool(query.Get("showHidden"))   // 是否显示隐藏文件
 	showHidden, _ = strconv.ParseBool(query.Get("showHidden"))   // 是否显示隐藏文件
 	showDirSize, _ = strconv.ParseBool(query.Get("showDirSize")) // 是否计算文件夹大小
 	showDirSize, _ = strconv.ParseBool(query.Get("showDirSize")) // 是否计算文件夹大小
 
 
-	// 打开目录
+	// 打开目录,读入对象
 	d, err := os.Open(localDir)
 	d, err := os.Open(localDir)
 	if err != nil {
 	if err != nil {
-		logrus.Error("文件查询发生异常, 异常为: ", err.Error())
+		logrus.Error("文件查询发生异常, 异常为: ", err)
 		_, err = w.Write(resultError(-3, err))
 		_, err = w.Write(resultError(-3, err))
 		if err != nil {
 		if err != nil {
-			logrus.Error("文件查询发生异常, 异常为: ", err.Error())
+			logrus.Error("文件查询发生异常, 异常为: ", err)
 		}
 		}
 		return
 		return
 	}
 	}
 	defer func(d *os.File) {
 	defer func(d *os.File) {
-		err := d.Close()
+		err = d.Close()
 		if err != nil {
 		if err != nil {
-
+			logrus.Error("文件查询发生异常, 异常为: ", err)
 		}
 		}
 	}(d)
 	}(d)
+	logrus.Info("文件查询, 目录读取成功!")
 
 
 	// 读取当前目录下的文件和子目录
 	// 读取当前目录下的文件和子目录
-	files, fileErr := d.ReadDir(0)
-	if fileErr != nil {
-		fmt.Println("读取文件异常:", fileErr)
-		_, err := w.Write(resultError(-3, fileErr))
+	files, err := d.ReadDir(0)
+	if err != nil {
+		logrus.Error("文件查询发生异常, 异常为: ", err)
+		_, err = w.Write(resultError(-3, err))
 		if err != nil {
 		if err != nil {
-			return
+			logrus.Error("文件查询发生异常, 异常为: ", err)
 		}
 		}
 		return
 		return
 	}
 	}
+	logrus.Info("文件查询, 文件及子目录读取成功!")
 
 
 	// 组织返回的json
 	// 组织返回的json
-	var filesList []map[string]string
+	var filesInfos []map[string]string
 	for _, file := range files {
 	for _, file := range files {
-		info, err := file.Info()
+		var info os.FileInfo
+		info, err = file.Info()
 		if err != nil {
 		if err != nil {
+			logrus.Error("文件查询发生异常, 异常为: ", err)
 			return
 			return
 		}
 		}
 		if !showHidden && len(info.Name()) > 0 && info.Name()[0] == '.' {
 		if !showHidden && len(info.Name()) > 0 && info.Name()[0] == '.' {
 			continue
 			continue
 		}
 		}
-		files := make(map[string]string)
-		files["path"] = filePath
-		files["name"] = info.Name()
-		files["fileType"] = ""
+		fileInfo := make(map[string]string)
+		fileInfo["path"] = filePath
+		fileInfo["name"] = info.Name()
+		fileInfo["fileType"] = ""
 		fileNameSplit := strings.Split(info.Name(), ".")
 		fileNameSplit := strings.Split(info.Name(), ".")
 		if len(fileNameSplit) > 1 {
 		if len(fileNameSplit) > 1 {
-			files["fileType"] = fileNameSplit[len(fileNameSplit)-1]
+			fileInfo["fileType"] = fileNameSplit[len(fileNameSplit)-1]
 		}
 		}
-		files["size"] = formatSize(float64(info.Size()), 0)
-		files["modified"] = info.ModTime().Format("2006-01-02 15:04:05")
-		files["type"] = "file"
+		fileInfo["size"] = formatSize(float64(info.Size()), 0)
+		fileInfo["modified"] = info.ModTime().Format(time.DateTime)
+		fileInfo["type"] = "file"
 		if info.IsDir() {
 		if info.IsDir() {
-			files["fileType"] = "folder"
-			dirPath := filepath.Join(dir, file.Name())
-			files["type"] = "dir"
-			files["size"] = ""
+			fileInfo["fileType"] = "folder"
+			dirPath := filepath.Join(localDir, file.Name())
+			fileInfo["type"] = "dir"
+			fileInfo["size"] = ""
 			if showDirSize {
 			if showDirSize {
-				size, err := dirSize(dirPath)
-				if err != nil {
-					fmt.Println("计算目录大小异常:", err)
-				}
-				files["size"] = formatSize(float64(size), 0)
+				var size int64
+				size = dirSize(dirPath)
+				fileInfo["size"] = formatSize(float64(size), 0)
 			}
 			}
 		}
 		}
-		filesList = append(filesList, files)
-		sort.Slice(filesList, func(i, j int) bool {
-			return filesList[j]["type"] == "file"
-		})
+		filesInfos = append(filesInfos, fileInfo)
 	}
 	}
+	sort.Slice(filesInfos, func(i, j int) bool {
+		return filesInfos[j]["type"] == "file"
+	})
+	logrus.Info("文件查询, 文件信息组织成功!")
 
 
-	// 设置 Content-Type 为 application/json
+	// 设置 Content-Type 为 application/json 并返回文件信息数据
 	w.Header().Set("Content-Type", "application/json")
 	w.Header().Set("Content-Type", "application/json")
-
-	// 返回 JSON 数据
-	_, err = w.Write(resultSuccess(filesList))
+	_, err = w.Write(resultSuccess(filesInfos))
 	if err != nil {
 	if err != nil {
+		logrus.Error("文件查询发生异常, 异常为: ", err)
 		return
 		return
 	}
 	}
+	logrus.Info("文件查询方法执行成功!")
 }
 }
 
 
 // HandleDownloadRequest 下载文件
 // HandleDownloadRequest 下载文件
 func HandleDownloadRequest(w http.ResponseWriter, r *http.Request) {
 func HandleDownloadRequest(w http.ResponseWriter, r *http.Request) {
+	// 获取参数
 	query := r.URL.Path
 	query := r.URL.Path
 	reqPthSplit := strings.Split(strings.TrimLeft(query, "/"), "/")
 	reqPthSplit := strings.Split(strings.TrimLeft(query, "/"), "/")
+
+	// 切割出文件名并写入返回头里
 	fileName := reqPthSplit[len(reqPthSplit)-1]
 	fileName := reqPthSplit[len(reqPthSplit)-1]
 	reName := strings.ReplaceAll(fileName, "pkgDir_", "")
 	reName := strings.ReplaceAll(fileName, "pkgDir_", "")
 	if reName == ".zip" {
 	if reName == ".zip" {
@@ -196,27 +202,27 @@ func HandleDownloadRequest(w http.ResponseWriter, r *http.Request) {
 	}
 	}
 	w.Header().Set("Content-Disposition", "attachment; filename="+reName)
 	w.Header().Set("Content-Disposition", "attachment; filename="+reName)
 
 
-	// 认证
-	authCode := reqPthSplit[1]
+	// 认证并处理路径
+	pathCode := reqPthSplit[1]
 	var pathList []string
 	var pathList []string
-	tag, msg := authToPath(authCode)
-	// 第一个元素是url,最后一个是文件名
-	pathList = append(reqPthSplit[2 : len(reqPthSplit)-1])
+	tag, msg := authToPath(pathCode)
+	pathList = append(reqPthSplit[2 : len(reqPthSplit)-1]) // 第一个元素是url,最后一个是文件名
 	if msg != "" {
 	if msg != "" {
-		fmt.Println(msg)
 		if !tag {
 		if !tag {
-			http.Error(w, msg, 500)
+			logrus.Error("下载文件发生异常, 异常为: ", msg)
+			http.Error(w, msg, http.StatusInternalServerError)
 			return
 			return
 		}
 		}
-		// 第二个元素是auth
-		pathList = append(reqPthSplit[2 : len(reqPthSplit)-1])
+		pathList = append(reqPthSplit[2 : len(reqPthSplit)-1]) // 第二个元素是auth
 	}
 	}
-
 	filePath := path.Join(pathList...)
 	filePath := path.Join(pathList...)
+	localDir := strings.ReplaceAll(dir, "\\", "/")
+	logrus.Info("下载文件, 路径处理完成!")
+
 	// 处理文件夹的情况
 	// 处理文件夹的情况
 	if strings.HasPrefix(fileName, "pkgDir_") {
 	if strings.HasPrefix(fileName, "pkgDir_") {
 		fileName = strings.ReplaceAll(fileName, "pkgDir_", "")
 		fileName = strings.ReplaceAll(fileName, "pkgDir_", "")
-		dirPath := path.Join(dir, filePath, strings.ReplaceAll(fileName, ".zip", ""))
+		dirPath := path.Join(localDir, filePath, strings.ReplaceAll(fileName, ".zip", ""))
 		if fileName == ".zip" {
 		if fileName == ".zip" {
 			fileName = "root" + fileName
 			fileName = "root" + fileName
 		}
 		}
@@ -224,220 +230,209 @@ func HandleDownloadRequest(w http.ResponseWriter, r *http.Request) {
 		defer func(name string) {
 		defer func(name string) {
 			err := os.Remove(name)
 			err := os.Remove(name)
 			if err != nil {
 			if err != nil {
-
+				logrus.Error("下载文件发生异常, 异常为: ", err)
 			}
 			}
 		}(fileName)
 		}(fileName)
 
 
 		// 打开 zip 文件
 		// 打开 zip 文件
 		file, err := os.Open(fileName)
 		file, err := os.Open(fileName)
 		if err != nil {
 		if err != nil {
+			logrus.Error("下载文件发生异常, 异常为: ", err)
 			http.Error(w, err.Error(), http.StatusInternalServerError)
 			http.Error(w, err.Error(), http.StatusInternalServerError)
 			return
 			return
 		}
 		}
 		defer func(file *os.File) {
 		defer func(file *os.File) {
-			err := file.Close()
+			err = file.Close()
 			if err != nil {
 			if err != nil {
-
+				logrus.Error("下载文件发生异常, 异常为: ", err)
 			}
 			}
 		}(file)
 		}(file)
+		logrus.Info("下载文件, 文件夹ZIP生成成功!")
 
 
-		// 设置响应头
+		// 设置响应头并将 zip 文件内容复制到响应体中
 		w.Header().Set("Content-Type", "application/zip")
 		w.Header().Set("Content-Type", "application/zip")
-
-		// 将 zip 文件内容复制到响应体中
 		_, err = io.Copy(w, file)
 		_, err = io.Copy(w, file)
 		if err != nil {
 		if err != nil {
-			http.Error(w, err.Error(), http.StatusInternalServerError)
-			return
+			logrus.Error("下载文件发生异常, 异常为: ", err)
 		}
 		}
+		logrus.Info("下载文件方法执行成功!")
 		return
 		return
 	}
 	}
 
 
-	// 加载文件
-	downloadFile := filepath.Join(dir, filePath, fileName)
+	// 处理正常的文件
+	downloadFile := filepath.Join(localDir, filePath, fileName)
 	w.Header().Set("Content-Type", "application/octet-stream")
 	w.Header().Set("Content-Type", "application/octet-stream")
 	http.ServeFile(w, r, downloadFile)
 	http.ServeFile(w, r, downloadFile)
+	logrus.Info("下载文件方法执行成功!")
 }
 }
 
 
 // HandleRemoveRequest 删除文件
 // HandleRemoveRequest 删除文件
 func HandleRemoveRequest(w http.ResponseWriter, r *http.Request) {
 func HandleRemoveRequest(w http.ResponseWriter, r *http.Request) {
-	cookie, err := r.Cookie("session_id")
 	// 认证
 	// 认证
-	authErr := authToCookie(cookie)
-	if authErr != nil {
-		fmt.Println(authErr)
-		_, err := w.Write(resultError(-3, authErr))
+	cookie, err := r.Cookie("session_id")
+	err = authToCookie(cookie)
+	if err != nil {
+		_, err = w.Write(resultError(-3, err))
 		if err != nil {
 		if err != nil {
-			return
+			logrus.Error("删除文件发生异常, 异常为: ", err)
 		}
 		}
 		return
 		return
 	}
 	}
+
 	// 功能是否开启
 	// 功能是否开启
 	if !isDelete {
 	if !isDelete {
+		logrus.Error("删除文件非法访问, 功能未开启!")
 		w.Header().Set("Content-Type", "application/json")
 		w.Header().Set("Content-Type", "application/json")
-		_, err := w.Write(resultError(-2, errors.New("功能未开启! ")))
+		_, err = w.Write(resultError(-2, errors.New("功能未开启! ")))
 		if err != nil {
 		if err != nil {
-			return
+			logrus.Error("删除文件发生异常, 异常为: ", err)
 		}
 		}
 		return
 		return
 	}
 	}
 
 
-	// 初始化目录,获取参数
-	dir := dir
+	// 获取参数并初始化目录
+	localDir := strings.ReplaceAll(dir, "\\", "/")
 	query := r.URL.Query()
 	query := r.URL.Query()
-
-	// 获取文件路径
 	filePath := query.Get("filePath")
 	filePath := query.Get("filePath")
-
-	// 获取文件名
 	fileName := query.Get("fileName")
 	fileName := query.Get("fileName")
 
 
 	// 尝试删除文件
 	// 尝试删除文件
-	err = os.Remove(path.Join(dir, filePath, fileName))
+	err = os.Remove(path.Join(localDir, filePath, fileName))
 	if err != nil {
 	if err != nil {
-		fmt.Println("删除文件异常:", err)
-		_, err := w.Write(resultError(-1, err))
+		logrus.Error("删除文件发生异常, 异常为: ", err)
+		_, err = w.Write(resultError(-1, errors.New(strings.ReplaceAll(err.Error(), dir, ""))))
 		if err != nil {
 		if err != nil {
-			return
+			logrus.Error("删除文件发生异常, 异常为: ", err)
 		}
 		}
 		return
 		return
 	}
 	}
-	fmt.Println("删除成功!")
+	logrus.Info("删除文件, 文件删除成功!")
 
 
-	// 设置 Content-Type 为 application/json
+	// 设置 Content-Type 为 application/json 并返回成功的消息
 	w.Header().Set("Content-Type", "application/json")
 	w.Header().Set("Content-Type", "application/json")
-
-	// 返回 JSON 数据
 	_, err = w.Write(resultSuccess(nil))
 	_, err = w.Write(resultSuccess(nil))
+	if err != nil {
+		logrus.Error("删除文件发生异常, 异常为: ", err)
+		return
+	}
+	logrus.Info("删除文件方法执行成功!")
 }
 }
 
 
 // HandleUploadRequest 上传文件
 // HandleUploadRequest 上传文件
 func HandleUploadRequest(w http.ResponseWriter, r *http.Request) {
 func HandleUploadRequest(w http.ResponseWriter, r *http.Request) {
-	cookie, err := r.Cookie("session_id")
-	// 获取cookie
-	if cookie == nil {
-		_, err = w.Write(resultError(-3, errors.New("未验证, 请先进行验证! ")))
-		if err != nil {
-			return
-		}
-		return
-	}
 	// 认证
 	// 认证
-	authErr := authToCookie(cookie)
-	if authErr != nil {
-		fmt.Println(authErr)
-		_, err := w.Write(resultError(-3, authErr))
+	cookie, err := r.Cookie("session_id")
+	err = authToCookie(cookie)
+	if err != nil {
+		_, err = w.Write(resultError(-3, err))
 		if err != nil {
 		if err != nil {
-			return
+			logrus.Error("上传文件发生异常, 异常为: ", err)
 		}
 		}
 		return
 		return
 	}
 	}
 	// 功能是否开启
 	// 功能是否开启
 	if !isUpload {
 	if !isUpload {
+		logrus.Error("上传文件非法访问, 功能未开启!")
 		w.Header().Set("Content-Type", "application/json")
 		w.Header().Set("Content-Type", "application/json")
-		_, err := w.Write(resultError(-2, errors.New("功能未开启! ")))
+		_, err = w.Write(resultError(-2, errors.New("功能未开启! ")))
 		if err != nil {
 		if err != nil {
-			return
+			logrus.Error("上传文件发生异常,异常为: ", err)
 		}
 		}
 		return
 		return
 	}
 	}
+
 	if r.Method == "POST" {
 	if r.Method == "POST" {
-		// 解析表单数据
-		err := r.ParseMultipartForm(10 << 20) // 最大10MB
-		if err != nil {
-			fmt.Println(err)
-			return
-		}
+		// 获取文件及参数
 		filePath := r.FormValue("filePath")
 		filePath := r.FormValue("filePath")
-
-		// 获取文件句柄和文件头信息
-		file, handler, err := r.FormFile("file")
+		var (
+			file    multipart.File
+			handler *multipart.FileHeader
+		)
+		file, handler, err = r.FormFile("file")
 		if err != nil {
 		if err != nil {
-			fmt.Println("Error Retrieving the File")
-			fmt.Println(err)
+			logrus.Error("上传文件发生异常, 异常为: ", err)
 			return
 			return
 		}
 		}
 		defer func(file multipart.File) {
 		defer func(file multipart.File) {
-			err := file.Close()
+			err = file.Close()
 			if err != nil {
 			if err != nil {
-
+				logrus.Error("上传文件发生异常, 异常为: ", err)
 			}
 			}
 		}(file)
 		}(file)
-
-		fmt.Printf("Uploaded File: %+v\n", handler.Filename)
-		fmt.Printf("File Size: %+v\n", handler.Size)
-		fmt.Printf("MIME Header: %+v\n", handler.Header)
+		logrus.Info("上传文件, 文件获取成功!")
 
 
 		// 创建目标文件
 		// 创建目标文件
 		uploadFileName := filepath.Join(dir, filePath, handler.Filename)
 		uploadFileName := filepath.Join(dir, filePath, handler.Filename)
-		destFile, err := os.Create(uploadFileName)
+		var destFile *os.File
+		destFile, err = os.Create(uploadFileName)
 		if err != nil {
 		if err != nil {
-			fmt.Println(err)
+			logrus.Error("上传文件发生异常, 异常为: ", err)
 			return
 			return
 		}
 		}
 		defer func(destFile *os.File) {
 		defer func(destFile *os.File) {
-			err := destFile.Close()
+			err = destFile.Close()
 			if err != nil {
 			if err != nil {
-
+				logrus.Error("上传文件发生异常, 异常为: ", err)
 			}
 			}
 		}(destFile)
 		}(destFile)
+		logrus.Info("上传文件, 文件创建成功!")
 
 
 		//将文件内容拷贝到目标文件
 		//将文件内容拷贝到目标文件
 		_, err = io.Copy(destFile, file)
 		_, err = io.Copy(destFile, file)
 		if err != nil {
 		if err != nil {
-			fmt.Println(err)
+			logrus.Error("上传文件发生异常, 异常为: ", err)
 			return
 			return
 		}
 		}
-
 	}
 	}
+	logrus.Info("上传文件方法执行成功!")
 }
 }
 
 
 // HandleMkdirRequest 创建文件夹
 // HandleMkdirRequest 创建文件夹
 func HandleMkdirRequest(w http.ResponseWriter, r *http.Request) {
 func HandleMkdirRequest(w http.ResponseWriter, r *http.Request) {
-	cookie, err := r.Cookie("session_id")
-	// 获取cookie
-	if cookie == nil {
-		_, err := w.Write(resultError(-3, errors.New("未验证, 请先进行验证! ")))
-		if err != nil {
-			return
-		}
-		return
-	}
 	// 认证
 	// 认证
-	authErr := authToCookie(cookie)
-	if authErr != nil {
-		fmt.Println(authErr)
-		_, err := w.Write(resultError(-3, authErr))
+	cookie, err := r.Cookie("session_id")
+	err = authToCookie(cookie)
+	if err != nil {
+		_, err = w.Write(resultError(-3, err))
 		if err != nil {
 		if err != nil {
-			return
+			logrus.Error("创建文件夹发生异常, 异常为: ", err)
 		}
 		}
 		return
 		return
 	}
 	}
+
 	// 判断功能是否开启
 	// 判断功能是否开启
 	if !isMkdir {
 	if !isMkdir {
+		logrus.Error("上传文件非法访问, 功能未开启!")
 		w.Header().Set("Content-Type", "application/json")
 		w.Header().Set("Content-Type", "application/json")
-		_, err := w.Write(resultError(-2, errors.New("功能未开启! ")))
+		_, err = w.Write(resultError(-2, errors.New("功能未开启! ")))
 		if err != nil {
 		if err != nil {
-			fmt.Println("出现异常: ", err)
+			logrus.Error("创建文件夹发生异常, 异常为: ", err)
 		}
 		}
 		return
 		return
 	}
 	}
-	result := make(map[string]string)
+
+	// 获取参数并组织返回参数
 	query := r.URL.Query()
 	query := r.URL.Query()
 	dirPath := query.Get("dirPath")
 	dirPath := query.Get("dirPath")
+
 	// 创建目录
 	// 创建目录
 	mkdir := path.Join(dir, dirPath)
 	mkdir := path.Join(dir, dirPath)
 	err = os.Mkdir(mkdir, 0755)
 	err = os.Mkdir(mkdir, 0755)
 	if err != nil {
 	if err != nil {
-		fmt.Println("Error creating directory:", err)
+		logrus.Error("创建文件夹发生异常, 异常为: ", err)
+		_, err = w.Write(resultError(-2, err))
+		if err != nil {
+			logrus.Error("创建文件夹发生异常, 异常为: ", err)
+		}
 		return
 		return
 	}
 	}
-	result["code"] = "1"
+
 	// 设置 Content-Type 为 application/json
 	// 设置 Content-Type 为 application/json
 	w.Header().Set("Content-Type", "application/json")
 	w.Header().Set("Content-Type", "application/json")
-
-	resultJson, err := json.Marshal(result)
-
-	// 返回 JSON 数据
-	_, err = w.Write(resultJson)
+	_, err = w.Write(resultSuccess(nil))
+	if err != nil {
+		logrus.Error("创建文件夹发生异常, 异常为: ", err)
+		return
+	}
+	logrus.Info("创建文件夹方法执行成功!")
 }
 }

+ 23 - 15
src/units.go

@@ -8,6 +8,7 @@ import (
 	"encoding/hex"
 	"encoding/hex"
 	"encoding/json"
 	"encoding/json"
 	"fmt"
 	"fmt"
+	"github.com/sirupsen/logrus"
 	"io"
 	"io"
 	"os"
 	"os"
 	"path/filepath"
 	"path/filepath"
@@ -49,12 +50,12 @@ func handleNum(num float64) string {
 }
 }
 
 
 // 计算文件大小
 // 计算文件大小
-func dirSize(dir string) (int64, error) {
+func dirSize(dir string) int64 {
 	var size int64
 	var size int64
 	// 遍历文件夹下的所有文件和子文件夹
 	// 遍历文件夹下的所有文件和子文件夹
 	err := filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
 	err := filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
 		if err != nil {
 		if err != nil {
-			return err
+			logrus.Error("计算文件夹大小发生异常, 异常为: ", err)
 		}
 		}
 		// 如果是文件,则累加文件大小
 		// 如果是文件,则累加文件大小
 		if !info.IsDir() {
 		if !info.IsDir() {
@@ -63,9 +64,10 @@ func dirSize(dir string) (int64, error) {
 		return nil
 		return nil
 	})
 	})
 	if err != nil {
 	if err != nil {
-		return 0, err
+		logrus.Error("计算文件夹大小发生异常, 异常为: ", err)
+		return 0
 	}
 	}
-	return size, nil
+	return size
 }
 }
 
 
 // 生成hash
 // 生成hash
@@ -87,7 +89,7 @@ func generateSessionID() string {
 	b := make([]byte, 32)
 	b := make([]byte, 32)
 	_, err := rand.Read(b)
 	_, err := rand.Read(b)
 	if err != nil {
 	if err != nil {
-		fmt.Println("sessionId生成异常! ", err)
+		logrus.Error("sessionId生成发生异常, 异常为: ", err)
 		return ""
 		return ""
 	}
 	}
 	// 将随机字节数组编码为URL安全的Base64字符串
 	// 将随机字节数组编码为URL安全的Base64字符串
@@ -99,22 +101,24 @@ func createZipDir(dir, zipFile string) {
 	// 创建一个新的 zip 文件
 	// 创建一个新的 zip 文件
 	newZipFile, err := os.Create(zipFile)
 	newZipFile, err := os.Create(zipFile)
 	if err != nil {
 	if err != nil {
-		fmt.Println("文件创建失败!", err)
+		logrus.Error("压缩文件创建发生异常, 异常为: ", err)
 		return
 		return
 	}
 	}
 	defer func(newZipFile *os.File) {
 	defer func(newZipFile *os.File) {
-		err := newZipFile.Close()
+		err = newZipFile.Close()
 		if err != nil {
 		if err != nil {
-			fmt.Println("zip创建异常: ", err)
+			logrus.Error("压缩文件创建发生异常, 异常为: ", err)
+			return
 		}
 		}
 	}(newZipFile)
 	}(newZipFile)
 
 
 	// 创建一个 zip.Writer
 	// 创建一个 zip.Writer
 	zipWriter := zip.NewWriter(newZipFile)
 	zipWriter := zip.NewWriter(newZipFile)
 	defer func(zipWriter *zip.Writer) {
 	defer func(zipWriter *zip.Writer) {
-		err := zipWriter.Close()
+		err = zipWriter.Close()
 		if err != nil {
 		if err != nil {
-			fmt.Println("zip写对象创建异常: ", err)
+			logrus.Error("压缩文件创建发生异常, 异常为: ", err)
+			return
 		}
 		}
 	}(zipWriter)
 	}(zipWriter)
 
 
@@ -126,14 +130,18 @@ func createZipDir(dir, zipFile string) {
 
 
 		// 将文件或目录添加到 zip 文件中
 		// 将文件或目录添加到 zip 文件中
 		if !info.IsDir() {
 		if !info.IsDir() {
-			file, err := os.Open(path)
+			var (
+				file *os.File
+				f    io.Writer
+			)
+			file, err = os.Open(path)
 			if err != nil {
 			if err != nil {
 				return err
 				return err
 			}
 			}
 			defer func(file *os.File) {
 			defer func(file *os.File) {
-				err := file.Close()
+				err = file.Close()
 				if err != nil {
 				if err != nil {
-
+					logrus.Warning("压缩文件创建发生异常, 异常为: ", err)
 				}
 				}
 			}(file)
 			}(file)
 
 
@@ -143,7 +151,7 @@ func createZipDir(dir, zipFile string) {
 				return nil
 				return nil
 			}
 			}
 			zipPath = filepath.ToSlash(zipPath)
 			zipPath = filepath.ToSlash(zipPath)
-			f, err := zipWriter.Create(zipPath)
+			f, err = zipWriter.Create(zipPath)
 			if err != nil {
 			if err != nil {
 				return err
 				return err
 			}
 			}
@@ -157,7 +165,7 @@ func createZipDir(dir, zipFile string) {
 		return nil
 		return nil
 	})
 	})
 	if err != nil {
 	if err != nil {
-		return
+		logrus.Warning("压缩文件创建发生异常, 异常为: ", err)
 	}
 	}
 }
 }
 
 

File diff suppressed because it is too large
+ 4 - 0
static/assets/index-CBECYGe7.js


File diff suppressed because it is too large
+ 0 - 0
static/assets/index-D-iOwvCH.css


+ 3 - 0
static/file_ico.svg

@@ -0,0 +1,3 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg t="1715579291768" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1473"
+     width="200" height="200"><path d="M875.621625 354.290095l0-10.524704c0-50.519604-36.836977-91.566462-87.35658-91.566462L576.713884 252.198929c-30.522154 0-59.992349-10.524704-59.992349-41.046858l0 4.209882c0-50.519604-36.836977-83.146699-87.35658-83.146699L164.136268 132.215254c-50.519604 1.052982-96.829326 33.680077-96.829326 84.199681l0 536.772196c9.472745-13.682627 22.102391-24.207331 36.836977-31.575136L104.143918 216.413911c0-30.522154 29.470195-46.309722 59.992349-46.309722L430.416913 170.104189c30.522154 0 54.729485 15.787568 54.729485 46.309722 0 50.519604 41.046858 73.674976 91.566462 73.674976l211.55116 0c30.522154 0 50.519604 25.260314 50.519604 54.729485l0 9.472745L310.432215 354.291119c-50.519604 0-96.829326 41.046858-96.829326 91.566462l0 133.666302c11.577686-10.524704 23.154349-18.944468 36.836977-26.312272L250.439866 445.857581c0-30.522154 29.470195-54.729485 59.992349-54.729485l559.926546 0c30.522154 0 50.519604 25.260314 50.519604 54.729485l0 339.955622c0 30.522154-19.99745 54.729485-50.519604 54.729485L655.650701 840.542688c-11.577686 14.734586-25.260314 27.365254-42.09984 36.836977l255.755941 0c50.519604 0 87.35658-41.046858 87.35658-91.566462L956.663382 445.857581C957.716364 397.442918 930.35111 359.552959 875.621625 354.290095z" p-id="1474"></path><path d="M650.387837 758.447948c0-57.887408-47.362704-105.249089-105.249089-105.249089-11.577686 0-24.207331 2.104941-34.732036 6.314823l-26.312272 9.472745-12.629645-24.207331c-26.312272-50.519604-76.831876-82.09474-133.666302-82.09474-83.146699 0-150.506852 67.360154-150.506852 150.506852l0 34.732036-34.732036-3.157923c-4.209882-1.052982-7.367805-1.052982-10.524704-1.052982-32.627095 0-59.992349 26.312272-59.992349 59.992349 0 32.627095 26.312272 59.992349 59.992349 59.992349l403.104871 0C604.078115 863.697037 650.387837 816.335357 650.387837 758.447948z" p-id="1475"></path></svg>

+ 3 - 0
static/icon.svg

@@ -0,0 +1,3 @@
+<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg t="1716198199938" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4395"
+     width="200" height="200"><path d="M170.2 246.4h342.1s44.2-77.8 89.1-77.8h254.9c20.7 0 37.7 19.8 37.7 44l1.1 598.1c0 24.2-19.8 44-44 44h-681c-24.2 0-44-19.8-44-44V290.4c0.1-24.2 19.9-44 44.1-44z" fill="#694B4B" p-id="4396"></path><path d="M862.9 671.5l-688 38.3-22.2-406.4 688.1-59.3z" fill="#593F3F" p-id="4397"></path><path d="M870.8 671.8L242.2 707l-21.1-388 634.6-35.2z" fill="#593F3F" p-id="4398"></path><path d="M840.7 673.7L218.1 725l-21.9-383.4 623.4-55.9z" fill="#FFFFFF" p-id="4399"></path><path d="M807.9 715.1L178.6 750l-22.2-406.3 629.7-48.1z" fill="#F2F2F1" p-id="4400"></path><path d="M796 713.5l-619 36.3-22.1-406.3 618.8-40.1z" fill="#FFFFFF" p-id="4401"></path><path d="M895.2 425.1H509.1s-44.2-71.4-89.1-71.4H125.1c-20.7 0-38.9 16.3-38.9 36l40 429.2c0 19.7 19.8 35.8 44 35.8h685c24.2 0 44-16.1 44-35.8l40-358c0-19.7-19.8-35.8-44-35.8z" fill="#00B5FC" p-id="4402"></path></svg>

+ 14 - 0
static/index.html

@@ -0,0 +1,14 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8"/>
+    <link rel="icon" type="image/svg+xml" href="/icon.svg"/>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
+    <title>httpServer</title>
+  <script type="module" crossorigin src="/assets/index-CBECYGe7.js"></script>
+  <link rel="stylesheet" crossorigin href="/assets/index-D-iOwvCH.css">
+</head>
+<body>
+<div id="app"></div>
+</body>
+</html>

File diff suppressed because it is too large
+ 2 - 0
static/qr_code_ico.svg


Some files were not shown because too many files changed in this diff