Fail request when error occurs during download (#3214)
This commit is contained in:
@@ -448,6 +448,8 @@ func getDownloadObjectResponse(session *models.Principal, params objectApi.Downl
|
||||
// override filename is set
|
||||
decodeOverride, err := base64.StdEncoding.DecodeString(*params.OverrideFileName)
|
||||
if err != nil {
|
||||
fmtError := ErrorWithContext(ctx, fmt.Errorf("unable to decode OverrideFileName: %v", err))
|
||||
http.Error(rw, fmtError.APIError.DetailedMessage, http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -472,16 +474,16 @@ func getDownloadObjectResponse(session *models.Principal, params objectApi.Downl
|
||||
stat, err := resp.Stat()
|
||||
if err != nil {
|
||||
minErr := minio.ToErrorResponse(err)
|
||||
rw.WriteHeader(minErr.StatusCode)
|
||||
ErrorWithContext(ctx, fmt.Errorf("Failed to get Stat() response from server for %s (version %s): %v", prefix, opts.VersionID, minErr.Error()))
|
||||
fmtError := ErrorWithContext(ctx, fmt.Errorf("failed to get Stat() response from server for %s (version %s): %v", prefix, opts.VersionID, minErr.Error()))
|
||||
http.Error(rw, fmtError.APIError.DetailedMessage, http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
// if we are getting a Range Request (video) handle that specially
|
||||
ranges, err := parseRange(params.HTTPRequest.Header.Get("Range"), stat.Size)
|
||||
if err != nil {
|
||||
ErrorWithContext(ctx, fmt.Errorf("Unable to parse range header input %s: %v", params.HTTPRequest.Header.Get("Range"), err))
|
||||
rw.WriteHeader(400)
|
||||
fmtError := ErrorWithContext(ctx, fmt.Errorf("unable to parse range header input %s: %v", params.HTTPRequest.Header.Get("Range"), err))
|
||||
http.Error(rw, fmtError.APIError.DetailedMessage, http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
contentType := stat.ContentType
|
||||
@@ -510,8 +512,8 @@ func getDownloadObjectResponse(session *models.Principal, params objectApi.Downl
|
||||
|
||||
_, err = resp.Seek(start, io.SeekStart)
|
||||
if err != nil {
|
||||
ErrorWithContext(ctx, fmt.Errorf("Unable to seek at offset %d: %v", start, err))
|
||||
rw.WriteHeader(400)
|
||||
fmtError := ErrorWithContext(ctx, fmt.Errorf("unable to seek at offset %d: %v", start, err))
|
||||
http.Error(rw, fmtError.APIError.DetailedMessage, http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -524,7 +526,9 @@ func getDownloadObjectResponse(session *models.Principal, params objectApi.Downl
|
||||
rw.Header().Set("Content-Length", fmt.Sprintf("%d", length))
|
||||
_, err = io.Copy(rw, io.LimitReader(resp, length))
|
||||
if err != nil {
|
||||
ErrorWithContext(ctx, fmt.Errorf("Unable to write all data to client: %v", err))
|
||||
ErrorWithContext(ctx, fmt.Errorf("unable to write all data to client: %v", err))
|
||||
// You can't change headers after you already started writing the body.
|
||||
// Handle incomplete write in client.
|
||||
return
|
||||
}
|
||||
}), nil
|
||||
@@ -610,7 +614,8 @@ func getDownloadFolderResponse(session *models.Principal, params objectApi.Downl
|
||||
encodedPrefix := SanitizeEncodedPrefix(params.Prefix)
|
||||
decodedPrefix, err := base64.StdEncoding.DecodeString(encodedPrefix)
|
||||
if err != nil {
|
||||
ErrorWithContext(ctx, fmt.Errorf("Unable to parse encoded prefix %s: %v", encodedPrefix, err))
|
||||
fmtError := ErrorWithContext(ctx, fmt.Errorf("unable to parse encoded prefix %s: %v", encodedPrefix, err))
|
||||
http.Error(rw, fmtError.APIError.DetailedMessage, http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
@@ -632,7 +637,10 @@ func getDownloadFolderResponse(session *models.Principal, params objectApi.Downl
|
||||
// Copy the stream
|
||||
_, err := io.Copy(rw, resp)
|
||||
if err != nil {
|
||||
ErrorWithContext(ctx, fmt.Errorf("Unable to write all the requested data: %v", err))
|
||||
ErrorWithContext(ctx, fmt.Errorf("unable to write all the requested data: %v", err))
|
||||
// You can't change headers after you already started writing the body.
|
||||
// Handle incomplete write in client.
|
||||
return
|
||||
}
|
||||
}), nil
|
||||
}
|
||||
@@ -754,7 +762,10 @@ func getMultipleFilesDownloadResponse(session *models.Principal, params objectAp
|
||||
// Copy the stream
|
||||
_, err := io.Copy(rw, resp)
|
||||
if err != nil {
|
||||
ErrorWithContext(ctx, fmt.Errorf("Unable to write all the requested data: %v", err))
|
||||
ErrorWithContext(ctx, fmt.Errorf("unable to write all the requested data: %v", err))
|
||||
// You can't change headers after you already started writing the body.
|
||||
// Handle incomplete write in client.
|
||||
return
|
||||
}
|
||||
}), nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user