79425250

Date: 2025-02-09 16:33:14
Score: 2
Natty:
Report link

Нашел решение, нужно было написать свой загрузчик файлов для запросов через fetch, потому что capacitor блокирует XMLhttp запросы и поставить в upload как кастомный метод:

const handleCustomRequest = async ({ file, onSuccess, onError }, eventId) => {
console.log("Отправка файла вручную:", file);

if (!eventId) {
  console.error("Ошибка: eventId отсутствует");
  onError(new Error("Ошибка: eventId отсутствует"));
  return;
}

const formData = new FormData();

// Принудительно закодируем имя файла в UTF-8
const encodedFileName = new Blob([file], { type: file.type });

formData.append("file", encodedFileName, encodeURIComponent(file.name)); // Кодируем имя файла

try {
  const response = await fetch(
    `${process.env.REACT_APP_API_URL}/api/Photo?event_id=${eventId}`,
    {
      method: "POST",
      body: formData,
    }
  );

  if (!response.ok) throw new Error(`Ошибка: ${response.statusText}`);

  console.log("Файл успешно загружен!");
  onSuccess();
} catch (error) {
  console.error("Ошибка при загрузке файла:", error);
  onError(error);
}

};

<Upload
    customRequest={(options) => handleCustomRequest(options, event.id)}
    listType="picture-card"
    showUploadList={false}
    multiple={true}
    onChange={handleUploadChange(event.id)} // Обработчик изменения состояния загрузки
  >
    <button style={{ border: 0, background: "none" }} type="button">
      <PlusOutlined />
      <div style={{ marginTop: 8 }}>Добавить файлы</div>
    </button>
  </Upload>
Reasons:
  • Long answer (-1):
  • Has code block (-0.5):
  • Self-answer (0.5):
  • No latin characters (2):
  • Low reputation (1):
Posted by: Вадим Дементьев