From 5361f76b1135ad03a3637e1b2e6528e9b9802efd Mon Sep 17 00:00:00 2001 From: boojack Date: Mon, 3 Apr 2023 23:16:43 +0800 Subject: [PATCH] chore: update filename when creating resource (#1460) --- server/resource.go | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/server/resource.go b/server/resource.go index 39c264dd..96795048 100644 --- a/server/resource.go +++ b/server/resource.go @@ -79,7 +79,6 @@ func (s *Server) registerResourceRoutes(g *echo.Group) { return echo.NewHTTPError(http.StatusBadRequest, "Upload file not found").SetInternal(err) } - filename := file.Filename filetype := file.Header.Get("Content-Type") size := file.Size sourceFile, err := file.Open() @@ -88,6 +87,7 @@ func (s *Server) registerResourceRoutes(g *echo.Group) { } defer sourceFile.Close() + var resourceCreate *api.ResourceCreate systemSettingStorageServiceID, err := s.Store.FindSystemSetting(ctx, &api.SystemSettingFind{Name: api.SystemSettingStorageServiceIDName}) if err != nil && common.ErrorCode(err) != common.NotFound { return echo.NewHTTPError(http.StatusInternalServerError, "Failed to find storage").SetInternal(err) @@ -99,23 +99,19 @@ func (s *Server) registerResourceRoutes(g *echo.Group) { return echo.NewHTTPError(http.StatusInternalServerError, "Failed to unmarshal storage service id").SetInternal(err) } } - - var resourceCreate *api.ResourceCreate if storageServiceID == api.DatabaseStorage { - // Database storage. fileBytes, err := io.ReadAll(sourceFile) if err != nil { return echo.NewHTTPError(http.StatusInternalServerError, "Failed to read file").SetInternal(err) } resourceCreate = &api.ResourceCreate{ CreatorID: userID, - Filename: filename, + Filename: file.Filename, Type: filetype, Size: size, Blob: fileBytes, } } else if storageServiceID == api.LocalStorage { - // Local storage. systemSettingLocalStoragePath, err := s.Store.FindSystemSetting(ctx, &api.SystemSettingFind{Name: api.SystemSettingLocalStoragePathName}) if err != nil && common.ErrorCode(err) != common.NotFound { return echo.NewHTTPError(http.StatusInternalServerError, "Failed to find local storage path setting").SetInternal(err) @@ -131,9 +127,9 @@ func (s *Server) registerResourceRoutes(g *echo.Group) { if !strings.Contains(filePath, "{filename}") { filePath = path.Join(filePath, "{filename}") } - filePath = path.Join(s.Profile.Data, replacePathTemplate(filePath, filename)) - dirPath := filepath.Dir(filePath) - if err = os.MkdirAll(dirPath, os.ModePerm); err != nil { + filePath = path.Join(s.Profile.Data, replacePathTemplate(filePath, file.Filename)) + dir, filename := filepath.Split(filePath) + if err = os.MkdirAll(dir, os.ModePerm); err != nil { return echo.NewHTTPError(http.StatusInternalServerError, "Failed to create directory").SetInternal(err) } dst, err := os.Create(filePath) @@ -161,12 +157,7 @@ func (s *Server) registerResourceRoutes(g *echo.Group) { if storage.Type == api.StorageS3 { s3Config := storage.Config.S3Config - var s3FileKey string - if !strings.Contains(s3Config.Path, "{filename}") { - s3FileKey = path.Join(s3Config.Path, "{filename}") - } - s3FileKey = replacePathTemplate(s3FileKey, filename) - s3client, err := s3.NewClient(ctx, &s3.Config{ + s3Client, err := s3.NewClient(ctx, &s3.Config{ AccessKey: s3Config.AccessKey, SecretKey: s3Config.SecretKey, EndPoint: s3Config.EndPoint, @@ -179,7 +170,13 @@ func (s *Server) registerResourceRoutes(g *echo.Group) { return echo.NewHTTPError(http.StatusInternalServerError, "Failed to new s3 client").SetInternal(err) } - link, err := s3client.UploadFile(ctx, s3FileKey, filetype, sourceFile) + filePath := s3Config.Path + if !strings.Contains(filePath, "{filename}") { + filePath = path.Join(filePath, "{filename}") + } + filePath = replacePathTemplate(filePath, file.Filename) + _, filename := filepath.Split(filePath) + link, err := s3Client.UploadFile(ctx, filePath, filetype, sourceFile) if err != nil { return echo.NewHTTPError(http.StatusInternalServerError, "Failed to upload via s3 client").SetInternal(err) }