|
- package service
-
- import (
- logger "decompress/lib/log"
- "encoding/json"
- "io"
- "net/http"
- "os"
- "strings"
-
- "github.com/gin-gonic/gin"
- )
-
- type FileInfo struct {
- FileName string
- ModTime string
- IsDir bool
- Size int64
- ParenDir string
- }
-
- func GetDirs(ctx *gin.Context) {
- baseDir := ctx.Query("baseDir")
- parentDir := ctx.Query("parentDir")
- wholeDir := baseDir + "/" + parentDir
- if strings.HasSuffix(baseDir, "/") {
- wholeDir = baseDir + parentDir
- }
- files, err := readDir(wholeDir)
- if err != nil {
- logger.LOG.Error("readDir failed:", err.Error())
- ctx.JSON(http.StatusInternalServerError, gin.H{
- "resultCode": "-1",
- })
- return
- }
-
- var fileInfos []FileInfo
-
- for _, file := range files {
- var tmp string
- if parentDir == "" {
- tmp = file.Name()
- } else {
- tmp = parentDir + "/" + file.Name()
- }
-
- fileInfos = append(fileInfos, FileInfo{
- FileName: file.Name(),
- ModTime: file.ModTime().Format("2006-01-02 15:04:05"),
- IsDir: file.IsDir(),
- Size: file.Size(),
- ParenDir: tmp,
- })
- }
-
- tmp, err := json.Marshal(fileInfos)
- if err != nil {
- logger.LOG.Error("json.Marshal failed:", err.Error())
- ctx.JSON(http.StatusInternalServerError, gin.H{
- "resultCode": "-1",
- })
- return
- }
-
- ctx.JSON(http.StatusOK, gin.H{
- "resultCode": "0",
- "fileInfos": string(tmp),
- })
-
- }
-
- // readDir reads the directory named by dirname and returns
- // a list of directory entries sorted by filename.
- func readDir(dirname string) ([]os.FileInfo, error) {
- f, err := os.Open(dirname)
- if err != nil {
- return nil, err
- }
-
- list, err := f.Readdir(100)
- f.Close()
- if err != nil {
- logger.LOG.Error("Readdir failed")
- if err == io.EOF {
- return nil, nil
- }
- return nil, err
- }
-
- //sort.Slice(list, func(i, j int) bool { return list[i].Name() < list[j].Name() })
- return list, nil
- }
|