@@ -52,12 +52,6 @@ export class PUTRequestHandler implements WebDavMethodHandler {
5252 webdavLogger . info (
5353 `[PUT] File '${ resource . name } ' already exists in '${ resource . path . dir } ', it will be replaced...` ,
5454 ) ;
55- try {
56- await WebDavUtils . deleteOrTrashItem ( driveFileItem ) ;
57- await DriveItemRepository . instance . delete ( [ driveFileItem . uuid ] ) ;
58- } catch {
59- //noop
60- }
6155 }
6256
6357 const { user } = await AuthService . instance . getAuthDetails ( ) ;
@@ -104,15 +98,37 @@ export class PUTRequestHandler implements WebDavMethodHandler {
10498 }
10599
106100 const driveTimer = CLIUtils . timer ( ) ;
107- const file = await DriveFileService . instance . createFile ( {
101+ const filePayload = {
108102 plainName : resource . path . name ,
109103 type : fileType ,
110104 size : contentLength ,
111105 folderUuid : parentDriveFolderItem . uuid ,
112106 fileId,
113107 bucket,
114108 encryptVersion : EncryptionVersion . Aes03 ,
115- } ) ;
109+ } ;
110+
111+ let file ;
112+ if ( driveFileItem ?. itemType === 'file' && contentLength > 0 ) {
113+ try {
114+ file = await DriveFileService . instance . replaceFile ( driveFileItem . uuid , filePayload ) ;
115+ } catch ( error ) {
116+ webdavLogger . warn (
117+ `[PUT] File replace failed for '${ resource . url } ', falling back to delete and create: ${
118+ error instanceof Error ? error . message : String ( error )
119+ } `,
120+ ) ;
121+ await WebDavUtils . deleteOrTrashItem ( driveFileItem ) ;
122+ await DriveItemRepository . instance . delete ( [ driveFileItem . uuid ] ) ;
123+ file = await DriveFileService . instance . createFile ( filePayload ) ;
124+ }
125+ } else {
126+ if ( driveFileItem ?. itemType === 'file' ) {
127+ await WebDavUtils . deleteOrTrashItem ( driveFileItem ) ;
128+ await DriveItemRepository . instance . delete ( [ driveFileItem . uuid ] ) ;
129+ }
130+ file = await DriveFileService . instance . createFile ( filePayload ) ;
131+ }
116132 timings . driveUpload = driveTimer . stop ( ) ;
117133
118134 await DriveItemRepository . instance . createOrUpdate ( [
0 commit comments