diff --git a/modules/frontend/src/pages/SettingsPage/SettingsPage.tsx b/modules/frontend/src/pages/SettingsPage/SettingsPage.tsx index c2973fd..43bdb85 100644 --- a/modules/frontend/src/pages/SettingsPage/SettingsPage.tsx +++ b/modules/frontend/src/pages/SettingsPage/SettingsPage.tsx @@ -48,46 +48,39 @@ export const SettingsPage: React.FC = () => { }, [userId]); // Обработка загрузки файла -const handleFileChange = async (e: React.ChangeEvent) => { + const handleFileChange = async (e: React.ChangeEvent) => { const file = e.target.files?.[0]; if (!file) return; setUploading(true); setError(null); - // Создаем стандартный объект FormData + // Создаем FormData строго по спецификации const formData = new FormData(); - // Ключ "image" соответствует вашему OpenAPI formData.append("image", file); try { - // Используем нативный fetch вместо сгенерированного postMediaUpload - const response = await fetch("/api/v1/media/upload", { - method: "POST", - body: formData, + // Используем fetch напрямую или убеждаемся, что клиент принимает FormData + const res = await postMediaUpload({ + // @ts-ignore - обходим строгую типизацию тела, если она ожидает объект + body: formData, headers: { - // Важно: НЕ УКАЗЫВАЕМ Content-Type. - // Браузер сам добавит multipart/form-data и сгенерирует boundary. - "X-XSRF-TOKEN": xsrfToken || "", + // УДАЛЯЕМ Content-Type вообще. + // Если оставить undefined, некоторые клиенты могут подставить 'application/json'. + // Нам нужно, чтобы заголовок отсутствовал в объекте headers, + // тогда fetch сам выставит multipart/form-data с boundary. + "X-XSRF-TOKEN": xsrfToken, }, }); - if (!response.ok) { - const errorText = await response.text(); - throw new Error(errorText || "Upload failed"); - } - - // Ответ должен соответствовать схеме Image.yaml - const data = await response.json(); - - if (data && data.id) { - setAvatarId(data.id); - setAvatarUrl(data.image_path ?? null); + if (res.data && res.data.id) { + setAvatarId(res.data.id); + setAvatarUrl(res.data.image_path ?? null); setSuccess("Image uploaded!"); } } catch (err: any) { console.error("Upload error:", err); - setError(err.message || "Failed to upload image"); + setError("Upload failed. Check if the file is an image."); } finally { setUploading(false); }