add: file export for table
This commit is contained in:
@@ -64,16 +64,33 @@ func (m *SysJob) GetFileExportTable(c *gin.Context) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (m *FileExport) GetFileList(c *gin.Context) {
|
func (m *FileExport) GetFileList(c *gin.Context) {
|
||||||
dir := c.Query("path")
|
var querys FileExportQuery
|
||||||
suffix := c.Query("suffix")
|
|
||||||
|
|
||||||
files, err := file.GetFileInfo(dir, suffix)
|
if err := c.ShouldBindQuery(&querys); err != nil {
|
||||||
|
c.JSON(http.StatusBadRequest, services.ErrResp(err.Error()))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
files, err := file.GetFileInfo(querys.Path, querys.Suffix)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Error(err)
|
log.Error(err)
|
||||||
c.JSON(http.StatusInternalServerError, services.ErrResp(err.Error()))
|
c.JSON(http.StatusInternalServerError, services.ErrResp(err.Error()))
|
||||||
}
|
}
|
||||||
total := int64(len(files))
|
|
||||||
c.JSON(http.StatusOK, services.TotalDataResp(files, total))
|
// split files list
|
||||||
|
lenNum := int64(len(files))
|
||||||
|
start := (querys.PageNum - 1) * querys.PageSize
|
||||||
|
end := start + querys.PageSize
|
||||||
|
var splitList []file.FileInfo
|
||||||
|
if start >= lenNum {
|
||||||
|
splitList = []file.FileInfo{}
|
||||||
|
} else if end >= lenNum {
|
||||||
|
splitList = files[start:]
|
||||||
|
} else {
|
||||||
|
splitList = files[start:end]
|
||||||
|
}
|
||||||
|
total := len(files)
|
||||||
|
c.JSON(http.StatusOK, services.TotalDataResp(splitList, total))
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *FileExport) Total(c *gin.Context) {
|
func (m *FileExport) Total(c *gin.Context) {
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package file_export
|
package file_export
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"be.ems/lib/file"
|
||||||
"gorm.io/datatypes"
|
"gorm.io/datatypes"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -19,16 +20,12 @@ func (m *SysJob) TableName() string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type FileExport struct {
|
type FileExport struct {
|
||||||
FileType string `json:"fileType"` // 文件类型
|
file.FileInfo
|
||||||
FileMode string `json:"fileMode"` // 文件的权限
|
|
||||||
LinkCount int64 `json:"linkCount"` // 硬链接数目
|
|
||||||
Owner string `json:"owner"` // 所属用户
|
|
||||||
Group string `json:"group"` // 所属组
|
|
||||||
Size int64 `json:"size"` // 文件的大小
|
|
||||||
ModifiedTime int64 `json:"modifiedTime"` // 最后修改时间,单位为秒
|
|
||||||
FileName string `json:"fileName"` // 文件的名称
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *FileExport) TableName() string {
|
type FileExportQuery struct {
|
||||||
return "file_export"
|
Path string `form:"path" binding:"required"`
|
||||||
|
Suffix string `form:"suffix"`
|
||||||
|
PageNum int64 `form:"pageNum" binding:"required"`
|
||||||
|
PageSize int64 `form:"pageSize" binding:"required"`
|
||||||
}
|
}
|
||||||
|
|||||||
27
lib/file/file.go
Normal file
27
lib/file/file.go
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
package file
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetFileAndDirCount(dir string) (int, int, error) {
|
||||||
|
var fileCount, dirCount int
|
||||||
|
|
||||||
|
err := filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if path == dir {
|
||||||
|
return nil // 跳过当前目录
|
||||||
|
}
|
||||||
|
if info.IsDir() {
|
||||||
|
dirCount++
|
||||||
|
} else {
|
||||||
|
fileCount++
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
|
||||||
|
return fileCount, dirCount, err
|
||||||
|
}
|
||||||
@@ -61,24 +61,3 @@ func GetFileInfo(dir, suffix string) ([]FileInfo, error) {
|
|||||||
}
|
}
|
||||||
return files, nil
|
return files, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetFileAndDirCount(dir string) (int, int, error) {
|
|
||||||
var fileCount, dirCount int
|
|
||||||
|
|
||||||
err := filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if path == dir {
|
|
||||||
return nil // 跳过当前目录
|
|
||||||
}
|
|
||||||
if info.IsDir() {
|
|
||||||
dirCount++
|
|
||||||
} else {
|
|
||||||
fileCount++
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
})
|
|
||||||
|
|
||||||
return fileCount, dirCount, err
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -59,24 +59,3 @@ func GetFileInfo(dir, suffix string) ([]FileInfo, error) {
|
|||||||
}
|
}
|
||||||
return files, nil
|
return files, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetFileAndDirCount(dir string) (int, int, error) {
|
|
||||||
var fileCount, dirCount int
|
|
||||||
|
|
||||||
err := filepath.Walk(dir, func(path string, info os.FileInfo, err error) error {
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
if path == dir {
|
|
||||||
return nil // 跳过当前目录
|
|
||||||
}
|
|
||||||
if info.IsDir() {
|
|
||||||
dirCount++
|
|
||||||
} else {
|
|
||||||
fileCount++
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
})
|
|
||||||
|
|
||||||
return fileCount, dirCount, err
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ func DataResp(data any) map[string]any {
|
|||||||
return map[string]any{"code": CODE_SUCC, "data": data}
|
return map[string]any{"code": CODE_SUCC, "data": data}
|
||||||
}
|
}
|
||||||
|
|
||||||
func SuccResp() map[string]any {
|
func SuccMessageResp() map[string]any {
|
||||||
return map[string]any{"code": CODE_SUCC, "message": "success"}
|
return map[string]any{"code": CODE_SUCC, "message": "success"}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -21,6 +21,15 @@ func TotalResp(total int64) map[string]any {
|
|||||||
return map[string]any{"code": CODE_SUCC, "total": total}
|
return map[string]any{"code": CODE_SUCC, "total": total}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TotalDataResp(data any, total int64) map[string]any {
|
func TotalDataResp(data any, total any) map[string]any {
|
||||||
return map[string]any{"code": CODE_SUCC, "data": data, "total": total}
|
return map[string]any{"code": CODE_SUCC, "data": data, "total": total}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func SuccResp(va map[string]any) map[string]any {
|
||||||
|
resp := make(map[string]any)
|
||||||
|
resp["code"] = CODE_SUCC
|
||||||
|
for k, v := range va {
|
||||||
|
resp[k] = v
|
||||||
|
}
|
||||||
|
return resp
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user