@@ -295,36 +295,46 @@ func getFileFromClient(ctx context.Context, m anyMessage, readWriter io.ReadWrit
295
295
return writeError (readWriter , fmt .Sprintf ("File path \" %s\" not found" , dir ))
296
296
}
297
297
} else if err != nil {
298
- logger .Error (ctx , err )
298
+ logger .Error (ctx , errors . WithMessagef ( err , "failed to stat directory \" %s \" " , dir ) )
299
299
return writeError (readWriter , fmt .Sprintf ("Directory \" %s\" error" , dir ))
300
300
}
301
301
302
- file , err := os .OpenFile ( message . FilePath , os . O_CREATE | os . O_WRONLY , message .Perms )
302
+ tmpFile , err := os .CreateTemp ( "" , filepath . Base ( message .FilePath ) )
303
303
if err != nil {
304
- logger .Error (ctx , err )
305
- return writeError (readWriter , "Failed to open file" )
304
+ logger .Error (ctx , errors . WithMessage ( err , "failed to create temp file" ) )
305
+ return writeError (readWriter , "Failed to create temp file" )
306
306
}
307
307
defer func (file * os.File ) {
308
- err : = file .Close ()
308
+ err = file .Close ()
309
309
if err != nil {
310
- logger .Error (ctx , err )
310
+ logger .Error (ctx , errors . WithMessage ( err , "failed to close temp file" ) )
311
311
}
312
- }(file )
312
+ err = os .Remove (file .Name ())
313
+ if err != nil {
314
+ logger .Error (ctx , errors .WithMessage (err , "failed to remove temp file" ))
315
+ }
316
+ }(tmpFile )
313
317
314
318
err = response .WriteResponse (readWriter , response.Response {
315
319
Code : response .StatusReadyToTransfer ,
316
320
Info : "File is ready to transfer" ,
317
321
})
318
322
if err != nil {
319
- return err
323
+ return errors . WithMessage ( err , "failed to write ready to transfer response" )
320
324
}
321
325
322
- _ , err = io .CopyN (file , readWriter , int64 (message .FileSize ))
326
+ _ , err = io .CopyN (tmpFile , readWriter , int64 (message .FileSize ))
323
327
if err != nil {
324
328
logger .Error (ctx , err )
325
329
return writeError (readWriter , "Failed to transfer file" )
326
330
}
327
331
332
+ err = copy .Copy (tmpFile .Name (), message .FilePath )
333
+ if err != nil {
334
+ logger .Error (ctx , errors .WithMessage (err , "failed to copy tmp file" ))
335
+ return writeError (readWriter , "Failed to copy tmp file" )
336
+ }
337
+
328
338
logger .Debug (ctx , "File successfully transferred" )
329
339
330
340
return response .WriteResponse (readWriter , response.Response {
0 commit comments