|
|
@ -1,8 +1,16 @@ |
|
|
package core |
|
|
package core |
|
|
|
|
|
|
|
|
|
|
|
import ( |
|
|
|
|
|
"os" |
|
|
|
|
|
"path/filepath" |
|
|
|
|
|
"scagnet/util" |
|
|
|
|
|
|
|
|
|
|
|
"go.uber.org/zap" |
|
|
|
|
|
) |
|
|
|
|
|
|
|
|
// 传入的参数
|
|
|
// 传入的参数
|
|
|
type Args struct { |
|
|
type Args struct { |
|
|
FilePath string `json:"file_path"` |
|
|
FilePath string |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
// 返回的参数
|
|
|
// 返回的参数
|
|
|
@ -10,10 +18,58 @@ type Reply struct { |
|
|
FilePath string `json:"file_path"` |
|
|
FilePath string `json:"file_path"` |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
//
|
|
|
// 返回的json数据
|
|
|
type FileRpc string |
|
|
type FileRpc string |
|
|
|
|
|
|
|
|
|
|
|
// 返回的文件json结构体
|
|
|
|
|
|
type FloopJson struct { |
|
|
|
|
|
Path string `json:"path"` |
|
|
|
|
|
Size int64 `json:"size"` |
|
|
|
|
|
Hash string `json:"hash"` |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 文件列表
|
|
|
|
|
|
type FlpList struct { |
|
|
|
|
|
Flist []FloopJson `json:"list"` |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
// 获取文件路径
|
|
|
// 获取文件路径
|
|
|
func (f *FileRpc) GetFilePath(args *Args, replay *Reply) error { |
|
|
func (f *FileRpc) GetFilePath(args *Args, replay *Reply) error { |
|
|
|
|
|
rootDir := args.FilePath |
|
|
|
|
|
logger := util.NewProductionLogger() |
|
|
|
|
|
defer logger.Sync() |
|
|
|
|
|
// 遍历目录下的文件
|
|
|
|
|
|
var allFiles []string // 存储所有文件路径
|
|
|
|
|
|
var flplist FlpList // 文件列表
|
|
|
|
|
|
|
|
|
|
|
|
// 递归遍历目录及其子目录
|
|
|
|
|
|
err := filepath.WalkDir(rootDir, func(path string, d os.DirEntry, err error) error { |
|
|
|
|
|
// 处理遍历过程中的错误(如权限不足)
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
logger.Error("访问路径出错", zap.Error(err)) |
|
|
|
|
|
return filepath.SkipDir // 跳过当前目录,继续遍历其他目录
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// 只收集文件(排除目录)
|
|
|
|
|
|
if !d.IsDir() { |
|
|
|
|
|
allFiles = append(allFiles, path) |
|
|
|
|
|
} |
|
|
|
|
|
return nil |
|
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
if err != nil { |
|
|
|
|
|
logger.Error("遍历目录出错", zap.Error(err)) |
|
|
|
|
|
return err |
|
|
|
|
|
} |
|
|
|
|
|
// 打印所有文件路径
|
|
|
|
|
|
for i, file := range allFiles { |
|
|
|
|
|
// 打印所有文件路径
|
|
|
|
|
|
// fmt.Printf("%d. %s\n", i+1, file)
|
|
|
|
|
|
d, _ := os.Stat(file) |
|
|
|
|
|
// 加入到列表
|
|
|
|
|
|
hash := util.CalacHash(file) |
|
|
|
|
|
flplist.Flist = append(flplist.Flist, FloopJson{Path: file, Size: d.Size(), Hash: hash}) |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
return nil |
|
|
return nil |
|
|
} |
|
|
} |
|
|
|