@@ -318,15 +318,16 @@ func UploadHandler(rwc io.ReadWriter, fullPath string, fileTransfer *FileTransfe
318318 if err == nil {
319319 return fmt .Errorf ("existing file found: %s" , fullPath )
320320 }
321- if errors .Is (err , fs .ErrNotExist ) {
322- // If not found, open or create a new .incomplete file
323- file , err = os .OpenFile (fullPath + IncompleteFileSuffix , os .O_CREATE | os .O_APPEND | os .O_WRONLY , 0644 )
324- if err != nil {
325- return err
326- }
321+
322+ if ! errors .Is (err , fs .ErrNotExist ) {
323+ return fmt .Errorf ("check file existence: %w" , err )
327324 }
328325
329- defer file .Close ()
326+ // If not found, open or create a new .incomplete file
327+ file , err = os .OpenFile (fullPath + IncompleteFileSuffix , os .O_CREATE | os .O_APPEND | os .O_WRONLY , 0644 )
328+ if err != nil {
329+ return fmt .Errorf ("open temp file for uploade: %w" , err )
330+ }
330331
331332 f , err := NewFileWrapper (fileStore , fullPath , 0 )
332333 if err != nil {
@@ -350,9 +351,16 @@ func UploadHandler(rwc io.ReadWriter, fullPath string, fileTransfer *FileTransfe
350351 }
351352
352353 if err := receiveFile (rwc , file , rForkWriter , iForkWriter , fileTransfer .bytesSentCounter ); err != nil {
354+ _ = file .Close () // Close on error
353355 return fmt .Errorf ("receive file: %v" , err )
354356 }
355357
358+ // Close the file before attempting to rename it.
359+ if err := file .Close (); err != nil {
360+ return fmt .Errorf ("close file: %v" , err )
361+ }
362+
363+ // Rename the temporary upload file to the final file name.
356364 if err := fileStore .Rename (fullPath + ".incomplete" , fullPath ); err != nil {
357365 return fmt .Errorf ("rename incomplete file: %v" , err )
358366 }
@@ -665,6 +673,12 @@ func UploadFolderHandler(rwc io.ReadWriter, fullPath string, fileTransfer *FileT
665673 return err
666674 }
667675
676+ // Close the file before attempting to rename it.
677+ if err := incWriter .Close (); err != nil {
678+ return fmt .Errorf ("close file: %v" , err )
679+ }
680+
681+ // Rename the temporary upload file to the final file name.
668682 if err := os .Rename (filePath + ".incomplete" , filePath ); err != nil {
669683 return err
670684 }
0 commit comments