@@ -448,6 +448,8 @@ func getDownloadObjectResponse(session *models.Principal, params objectApi.Downl
448
448
// override filename is set
449
449
decodeOverride , err := base64 .StdEncoding .DecodeString (* params .OverrideFileName )
450
450
if err != nil {
451
+ fmtError := ErrorWithContext (ctx , fmt .Errorf ("unable to decode OverrideFileName: %v" , err ))
452
+ http .Error (rw , fmtError .APIError .DetailedMessage , http .StatusBadRequest )
451
453
return
452
454
}
453
455
@@ -472,16 +474,16 @@ func getDownloadObjectResponse(session *models.Principal, params objectApi.Downl
472
474
stat , err := resp .Stat ()
473
475
if err != nil {
474
476
minErr := minio .ToErrorResponse (err )
475
- rw . WriteHeader ( minErr .StatusCode )
476
- ErrorWithContext ( ctx , fmt . Errorf ( "Failed to get Stat() response from server for %s (version %s): %v" , prefix , opts . VersionID , minErr . Error ()) )
477
+ fmtError := ErrorWithContext ( ctx , fmt . Errorf ( "failed to get Stat() response from server for %s (version %s): %v" , prefix , opts . VersionID , minErr .Error ()) )
478
+ http . Error ( rw , fmtError . APIError . DetailedMessage , http . StatusInternalServerError )
477
479
return
478
480
}
479
481
480
482
// if we are getting a Range Request (video) handle that specially
481
483
ranges , err := parseRange (params .HTTPRequest .Header .Get ("Range" ), stat .Size )
482
484
if err != nil {
483
- ErrorWithContext (ctx , fmt .Errorf ("Unable to parse range header input %s: %v" , params .HTTPRequest .Header .Get ("Range" ), err ))
484
- rw . WriteHeader ( 400 )
485
+ fmtError := ErrorWithContext (ctx , fmt .Errorf ("unable to parse range header input %s: %v" , params .HTTPRequest .Header .Get ("Range" ), err ))
486
+ http . Error ( rw , fmtError . APIError . DetailedMessage , http . StatusInternalServerError )
485
487
return
486
488
}
487
489
contentType := stat .ContentType
@@ -510,8 +512,8 @@ func getDownloadObjectResponse(session *models.Principal, params objectApi.Downl
510
512
511
513
_ , err = resp .Seek (start , io .SeekStart )
512
514
if err != nil {
513
- ErrorWithContext (ctx , fmt .Errorf ("Unable to seek at offset %d: %v" , start , err ))
514
- rw . WriteHeader ( 400 )
515
+ fmtError := ErrorWithContext (ctx , fmt .Errorf ("unable to seek at offset %d: %v" , start , err ))
516
+ http . Error ( rw , fmtError . APIError . DetailedMessage , http . StatusInternalServerError )
515
517
return
516
518
}
517
519
@@ -524,7 +526,9 @@ func getDownloadObjectResponse(session *models.Principal, params objectApi.Downl
524
526
rw .Header ().Set ("Content-Length" , fmt .Sprintf ("%d" , length ))
525
527
_ , err = io .Copy (rw , io .LimitReader (resp , length ))
526
528
if err != nil {
527
- ErrorWithContext (ctx , fmt .Errorf ("Unable to write all data to client: %v" , err ))
529
+ ErrorWithContext (ctx , fmt .Errorf ("unable to write all data to client: %v" , err ))
530
+ // You can't change headers after you already started writing the body.
531
+ // Handle incomplete write in client.
528
532
return
529
533
}
530
534
}), nil
@@ -610,7 +614,8 @@ func getDownloadFolderResponse(session *models.Principal, params objectApi.Downl
610
614
encodedPrefix := SanitizeEncodedPrefix (params .Prefix )
611
615
decodedPrefix , err := base64 .StdEncoding .DecodeString (encodedPrefix )
612
616
if err != nil {
613
- ErrorWithContext (ctx , fmt .Errorf ("Unable to parse encoded prefix %s: %v" , encodedPrefix , err ))
617
+ fmtError := ErrorWithContext (ctx , fmt .Errorf ("unable to parse encoded prefix %s: %v" , encodedPrefix , err ))
618
+ http .Error (rw , fmtError .APIError .DetailedMessage , http .StatusInternalServerError )
614
619
return
615
620
}
616
621
@@ -632,7 +637,10 @@ func getDownloadFolderResponse(session *models.Principal, params objectApi.Downl
632
637
// Copy the stream
633
638
_ , err := io .Copy (rw , resp )
634
639
if err != nil {
635
- ErrorWithContext (ctx , fmt .Errorf ("Unable to write all the requested data: %v" , err ))
640
+ ErrorWithContext (ctx , fmt .Errorf ("unable to write all the requested data: %v" , err ))
641
+ // You can't change headers after you already started writing the body.
642
+ // Handle incomplete write in client.
643
+ return
636
644
}
637
645
}), nil
638
646
}
@@ -754,7 +762,10 @@ func getMultipleFilesDownloadResponse(session *models.Principal, params objectAp
754
762
// Copy the stream
755
763
_ , err := io .Copy (rw , resp )
756
764
if err != nil {
757
- ErrorWithContext (ctx , fmt .Errorf ("Unable to write all the requested data: %v" , err ))
765
+ ErrorWithContext (ctx , fmt .Errorf ("unable to write all the requested data: %v" , err ))
766
+ // You can't change headers after you already started writing the body.
767
+ // Handle incomplete write in client.
768
+ return
758
769
}
759
770
}), nil
760
771
}
0 commit comments