From 317abedeceddd21c60008824135a73cfdd1ac335 Mon Sep 17 00:00:00 2001 From: Himmelschmidt <46351743+Himmelschmidt@users.noreply.github.com> Date: Tue, 11 Nov 2025 14:56:36 -0500 Subject: [PATCH] fix: check HTTP status in FileStream::from_response (#4947) (#4948) --- packages/fullstack/src/payloads/files.rs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/packages/fullstack/src/payloads/files.rs b/packages/fullstack/src/payloads/files.rs index 52036a4c4..fbc11e71a 100644 --- a/packages/fullstack/src/payloads/files.rs +++ b/packages/fullstack/src/payloads/files.rs @@ -249,6 +249,24 @@ impl FromRequest for FileStream { impl FromResponse for FileStream { fn from_response(res: ClientResponse) -> impl Future> { async move { + // Check status code first - don't try to stream error responses as files + if !res.status().is_success() { + let status_code = res.status().as_u16(); + let canonical_reason = res + .status() + .canonical_reason() + .unwrap_or("Unknown error") + .to_string(); + let bytes = res.bytes().await.unwrap_or_default(); + let message = String::from_utf8(bytes.to_vec()).unwrap_or(canonical_reason); + + return Err(ServerFnError::ServerError { + message, + code: status_code, + details: None, + }); + } + // Extract filename from Content-Disposition header if present. let name = res .headers()