Я разрабатываю простой скрипт для загрузки файла через AJAX, но после отправки формы переменная $_FILES полностью пуста, хотя файл существует в php://input, но нет простого способа извлечь только файл. Кто-нибудь знает причину и/или решение этой проблемы?
Я проверил все распространенные решения. enctype="мультипарт/форма-данные" права на временную папку закрытие тегов формы двойные кавычки и вывод файла-ввода в JS
Ничто не решило мою проблему.
КРАСНЫЙ Это НЕ jquery, и я не нашел дубликата за 24 часа. Поэтому, пожалуйста, не отмечайте как дубликат, если вы не уверены, что это один.
HTML
<form action = "upload.php" method = "POST" enctype = "multipart/form-data" id = "testf">
<input type = "file" name = "file" accept = ".jpg">
<input type = "submit" value = "Skicka">
</form>
JavaScript
let data = document.querySelector("#testf");
data.onsubmit = function() {
var http = new XMLHttpRequest();
http.open("upload.php", data.action);
http.onreadystatechange = function () {
console.info(http.response);
}
http.setRequestHeader("Content-type", data.enctype);
http.send(new FormData(data));
event.preventDefault();
return false;
}
PHP
<?php
var_dump($_FILES);
?>
Это должно распечатать содержимое моего файла, но
array(0) {}
это все, что я получаю. Полезная нагрузка запроса:
------WebKitFormBoundaryZVGq8suqFUUSFDtW
Content-Disposition: form-data; name = "file"; filename = "david.jpg"
Content-Type: image/jpeg
------WebKitFormBoundaryZVGq8suqFUUSFDtW--
ОП не использует jQuery.
Не дублировать. Пишу на js, а не на jquery.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


У вас возникла проблема с методом JavaScript XMLHttpReqest. Он принимает как минимум два параметра: метод и URL. Полные параметры: метод, URL, асинхронный, пользователь, пароль
Измените свой код с:
http.open("upload.php", data.action);
К:
http.open("post", data.action );
Обновлять: Также удалить
http.setRequestHeader("content-type", "multipart/form-data")
Данные формы уже устанавливают свои заголовки для типа содержимого.
Для справки см. XMLHttpRequest.open().
Я не делал этого переключения в исходном коде, но, к сожалению, все равно не влияет на результат.
Попробуйте закомментировать setReuestHeader. Дайте мне отзыв
Пожалуйста, отметьте ответ как правильный. Тоже обновил.
Извините, так получилось. Я понятия не имел, что браузер сам установил заголовок типа контента в соответствующие данные формы, чтобы php мог его получить. Content-Type: multipart/form-data; border=----WebKitFormBoundaryaOHix0yHdFVLGFaG И не только: Content-Type: multipart/form-data; Спасибо!
Вы проверили, установлено ли ограничение памяти на -1 или достаточно высокое в php. Иногда на сервере Apache или iis также существует блокировка загрузки больших файлов.
Проверено. Это небольшие файлы, и ограничение установлено на 128 МБ.
Возможный дубликат Загрузка файла jQuery Ajax