fix: bad serialization of multiparted data
All checks were successful
Build (frontend build only) / build (push) Successful in 2m55s

This commit is contained in:
Iron_Felix 2025-12-20 03:06:12 +03:00
parent ac7be4f764
commit 27acfab0cd

View file

@ -55,23 +55,32 @@ export const SettingsPage: React.FC = () => {
setUploading(true); setUploading(true);
setError(null); setError(null);
// Создаем FormData строго по спецификации
const formData = new FormData(); const formData = new FormData();
formData.append("file", file); formData.append("image", file);
try { try {
// Используем fetch напрямую или убеждаемся, что клиент принимает FormData
const res = await postMediaUpload({ const res = await postMediaUpload({
// @ts-ignore - обходим строгую типизацию тела, если она ожидает объект
body: formData, body: formData,
// Сбрасываем заголовок, чтобы браузер сам поставил multipart/form-data + boundary headers: {
headers: { "Content-Type": undefined as any, "X-XSRF-TOKEN": xsrfToken }, // УДАЛЯЕМ Content-Type вообще.
// Если оставить undefined, некоторые клиенты могут подставить 'application/json'.
// Нам нужно, чтобы заголовок отсутствовал в объекте headers,
// тогда fetch сам выставит multipart/form-data с boundary.
"X-XSRF-TOKEN": xsrfToken,
},
}); });
if (res.data && res.data.id) { if (res.data && res.data.id) {
setAvatarId(res.data.id); setAvatarId(res.data.id);
setAvatarUrl(res.data.image_path ?? null); // Для мгновенного превью setAvatarUrl(res.data.image_path ?? null);
setSuccess("Image uploaded!"); setSuccess("Image uploaded!");
} }
} catch (err: any) { } catch (err: any) {
setError("Failed to upload image"); console.error("Upload error:", err);
setError("Upload failed. Check if the file is an image.");
} finally { } finally {
setUploading(false); setUploading(false);
} }