@calculator212

Почему нормально не работает fetch в firefox при загрузке файла?

Проблема в том, что на сервере стоит ограничение на загрузку файлов определённого размера. Если размер файла будет 20мб, то вернется нормальное сообщение об ошибке, что файл слишком большой. Но если файл будет размером 100мб, то возврщается пустой запрос и выдается ошибка "TypeError: NetworkError when attempting to fetch resource.". Проблема в том, что в chrome - это работает нормально и возвращается нормальная ошибка, а в firefox, то что описал выше. В чем может быть проблема? Код запроса ниже.
function fetchUpload(form){
    fetch('/Task', {
        method: 'POST',
        headers: {
            "X-CSRF-TOKEN":"",
            "Content-Type": "multipart/form-data",
        },
        body: form 
    }).then(
        response => response.json()
    ).then(
        success => console.log(success)
    ).catch(
        error => console.log(error) 
    );
}
  • Вопрос задан
  • 151 просмотр
Пригласить эксперта
Ответы на вопрос 2
@iljaGolubev
Думаю, проблема в разных реализациях fetch стандарта.
С мозилой что-то похожее было https://bugzilla.mozilla.org/show_bug.cgi?id=1280189
Может так будет проще поймать ошибку:
.then( response => {
    if (response.status >= 200) {
      // console.log(response)
       return Promise.resolve(response)
    } else {
      return Promise.reject(new Error(response.statusText))  //new MyFetchError
    }
 })
.then(response => response.json())
.then(success => console.log(success))
.catch...

Если что-то не так с response.json(), то должна быть ошибка типа SyntaxError а не Network.

И ещё: если в form отправляется файл, то не лучше-ли в форме поставить ограничение или через FileApi определять размер?
Ответ написан
zkrvndm
@zkrvndm
Архитектор решений
Попробуй ответ прочитать как текст или как блоб, не пытайся сразу дешифровать json.

P. S. А еще у тебя ошибка. Вот это убери: "Content-Type": "multipart/form-data" данный заголовок некорректный, если указываешь multipart/form-data, то будь добр укажи и разделитель. Если не знаешь разделитель, то Content-Type не указывай вовсе, браузер сам его добавит и пропишет нужный разделитель.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы