diff --git a/internal/photos/api/file.go b/internal/photos/api/file.go index 1f0af5c..2a718dd 100644 --- a/internal/photos/api/file.go +++ b/internal/photos/api/file.go @@ -29,7 +29,7 @@ func (s *Service) PrepareStore() { } func (s *Service) StoreDir(checksum string) (string, error) { - dir := filepath.Join(s.Config.StorePath, "original", checksum[0:0], checksum[1:1], checksum[2:]) + dir := filepath.Join(s.Config.StorePath, "original", checksum[0:1], checksum[1:2], checksum) err := os.MkdirAll(dir, 0755) return dir, err } @@ -81,6 +81,18 @@ func (s *Service) FileCreate(c *gin.Context) { s.Error(c, http.StatusInternalServerError, err) return } + dir, err := s.StoreDir(originalChecksum) + if err != nil { + s.Error(c, http.StatusInternalServerError, err) + return + } + + data, err := os.Create(filepath.Join(dir, ".tmp")) + if err != nil { + s.Error(c, http.StatusInternalServerError, err) + return + } + defer data.Close() sum := sha1.New() size := uint64(0) @@ -90,7 +102,16 @@ func (s *Service) FileCreate(c *gin.Context) { s.Error(c, http.StatusInternalServerError, err) return } - sum.Write(b) + _, err = sum.Write(b) + if err != nil { + s.Error(c, http.StatusInternalServerError, err) + return + } + _, err = data.Write(b) + if err != nil { + s.Error(c, http.StatusInternalServerError, err) + return + } size += uint64(len(b)) } r := hex.EncodeToString(sum.Sum(nil))