feat: add delete file

This commit is contained in:
dukai 2025-05-20 10:47:40 +08:00
parent 24b356a984
commit 0d8992a5c3
3 changed files with 40 additions and 3 deletions

View File

@ -37,9 +37,9 @@ func (s *Service) HandleMkdir(
) *httpserver.Response {
params := req.Binded.(*MkdirParams)
path := params.Path
fullPath := utils.FullPath(path)
newPath := utils.NormalizePath(path)
err := s.FileSystemManager.MakeDirectory(req.Context(), fullPath)
err := s.FileSystemManager.MakeDirectory(req.Context(), utils.FullPath(newPath))
if err != nil {
logger.Error("makeDirectory %s: %v", path, err)
return resp.InternalServerError("mkdir failed, " + err.Error())
@ -56,8 +56,8 @@ func (s *Service) HandleListDirectory(
startFileName := req.QueryString("startFileName")
inclusive := req.QueryBool("inclusive")
limit := req.QueryInt("limit")
newPath := utils.NormalizePath(path)
rawEntries, moreAvailable, err := s.FileSystemManager.ListDirectoryEntries(
context.Background(),
utils.FullPath(newPath),

View File

@ -94,6 +94,17 @@ func (s *Service) HandleDeleteFile(
req *httpserver.Request,
resp *httpserver.Response,
) *httpserver.Response {
params := req.Binded.(*DeleteParams)
path := params.Path
isDir := params.IsDir
newPath := utils.NormalizePath(path)
err := s.FileSystemManager.DeleteFile(req.Context(), utils.FullPath(newPath), isDir)
if err != nil {
logger.Error("delete file %s: %v", path, err)
return resp.InternalServerError("delete file failed, " + err.Error())
}
return resp.NoContent()
}

View File

@ -169,6 +169,32 @@ func (f *FileSystemManager) DownloadFile(ctx context.Context, path utils.FullPat
return content, entry, nil
}
func (f *FileSystemManager) DeleteFile(ctx context.Context, path utils.FullPath, isDir bool) error {
f.Lock()
defer f.Unlock()
if string(path) == "/" {
return fmt.Errorf("cannot delete root")
}
entry, err := f.FindEntry(ctx, path)
if err != nil {
return fmt.Errorf("find entry failed: %v", err)
}
if !isDir {
if err := f.storage.DeleteObject(entry.S3Key); err != nil {
return fmt.Errorf("delete s3 object failed: %v", err)
}
}
if err := f.meta.DeleteEntry(ctx, path); err != nil {
return fmt.Errorf("delete entry failed: %v", err)
}
return nil
}
func (f *FileSystemManager) Shutdown() {
if f.meta != nil {
f.meta.Shutdown()