Задать вопрос
@popov654
Специалист в области веб-технологий

Почему происходит сбой при отправке некоторых файлов через JS FormData?

Есть простой скрипт на PHP, принимающий файл. Суть простая - взять и скопировать полученный файл из временной папки в постоянную. Для простоты вообще опустим копирование и будем выводить только содержимое массива $_FILES.

Есть JS код, взятый где-то в интернете, который создаёт объект FormData через конструктор (без аргумента в виде реальной формы), и добавляет туда файл, полученный из инпута.

Вопрос: некоторые файлы уходят на сервер без ошибки (.jpeg, .txt), а некоторые с ошибкой. При этом есть ощущение, что больше влияет размер файла, чем тип (без ошибки уходят маленькие файлы до 300-400 килобайт).

Смотрел в отладчик браузера - тип кодировки формы корректный (multipart/formdata), сам контент в виде файла тоже выглядит по стандарту (я знаю, как multipart внутри устроен), и сервер даже получает орригинальное имя без проблем. Но вот дальше что-то идёт не так.

Выдача PHP скрипта:
Array ( [file] => Array ( [name] => Vista_2010_CF2_my_skin.zip [type] => [tmp_name] => [error] => 1 [size] => 0 ) )

Размер архива 3,28 Мб.

При этом при попытке отправить фотку размером в 651 Кб всё нормально:

Array
(
    [file] => Array
        (
            [name] => DSCN5136.JPG
            [type] => image/jpeg
            [tmp_name] => C:\Windows\Temp\php5A47.tmp
            [error] => 0
            [size] => 646596
        )
)


В чём может быть проблема? Будь она в лимитах на передачу данных, как мне кажется, всё выглядело бы иначе. Тем более, файл явно доходит, раз PHP добавляет элемент в массив и верно заполняет имя.

UPDATE: попробовал .m4a файл размером почти в мегабайт - загрузка прошла успешно. Попробовал ZIP архив размером 247 байта - фейл. Тестирую в актуальной версии Google Chrome (в свежем Firefox всё точно так же).
  • Вопрос задан
  • 62 просмотра
Подписаться 1 Средний Комментировать
Решения вопроса 1
Ge1i0N
@Ge1i0N
Значение ошибок по коду можно посмотреть в доке.
В целом, вы предполагаете верно:
Размер принятого файла превысил максимально допустимый размер, который задан директивой upload_max_filesize конфигурационного файла
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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