Final fix for writeheader

This commit is contained in:
Mukhtar Akere
2025-08-05 05:01:34 +01:00
parent 40755fbdde
commit cb63fc69f5
2 changed files with 34 additions and 21 deletions

View File

@@ -463,16 +463,6 @@ func (h *Handler) handleGet(w http.ResponseWriter, r *http.Request) {
return
}
// Check if this will be a range request before streaming
isRangeRequest := r.Header.Get("Range") != ""
// Write status headers before streaming starts
if isRangeRequest {
w.WriteHeader(http.StatusPartialContent)
} else {
w.WriteHeader(http.StatusOK)
}
if err := file.StreamResponse(w, r); err != nil {
var streamErr *streamError
if errors.As(err, &streamErr) {
@@ -480,12 +470,17 @@ func (h *Handler) handleGet(w http.ResponseWriter, r *http.Request) {
if errors.Is(streamErr.Err, context.Canceled) || errors.Is(streamErr.Err, context.DeadlineExceeded) || streamErr.IsClientDisconnection {
return
}
// For other errors, we can't send HTTP error response since headers are already written
h.logger.Error().Err(streamErr.Err).Str("file", file.name).Msg("Stream error after headers written")
return
if streamErr.StatusCode > 0 {
http.Error(w, streamErr.Error(), streamErr.StatusCode)
return
} else {
// We've already written a status code, just log the error
h.logger.Error().Err(streamErr.Err).Msg("Streaming error")
return
}
} else {
// Generic error - can't send HTTP error response since headers are already written
h.logger.Error().Err(err).Str("file", file.name).Msg("Generic stream error after headers written")
// Generic error
http.Error(w, "Internal Server Error", http.StatusInternalServerError)
return
}
}