Есть простой скрипт на 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 всё точно так же).