Отказ от ответственности: Я очень мало знаю о PHP; Я только недавно начал играть с ним.Загрузите файл через ajax POST-запрос с использованием PHP-приложения на основе Silex
Фон: Я хочу загрузить файл с помощью javascript на стороне клиента и PHP на сервере. На бэкэнде я экспериментирую с микрокартами Silex PHP.
код Клиент:
HTML
<form id="fileform">
<input id="filefield" type="file" multiple="multiple" />
<input type="submit" />
</form>
Javascript код
var form = document.querySelector('#fileform');
var fileField = document.querySelector('#filefield');
form.addEventListener('submit', formSubmit, false);
function formSubmit(e) {
e.preventDefault();
let formData = new FormData();
let file = fileField.files[0];
formData.append('uploadedFile', file);
let config = {
method: 'POST',
mode: 'cors',
cache: 'default',
headers: {
'Content-Type': false
},
body: formData
};
fetch('http://localhost:8000/uploads/test', config).then((response) => {
console.log('submitted!');
});
}
Backend:
PHP (контроллер в приложении Silex основе)
use Symfony\Component\HttpFoundation\Request;
$uploads->post('/test', function (Request $request) use ($app) {
$file = $request->files->get('uploadedFile');
if ($file == NULL) {
return 'null';
} else {
return 'not null';
}
});
Проблема: Я ожидаю, чтобы иметь файл с именем «uploadedFile» в $request->files
объекта, но либо нет ничего там , или я не знаю, как достичь загруженного файла, потому что контроллер считает, что $file == NULL
истинно.
Как проверка работоспособности, я вернул $request->getContent()
с контроллера и проверил результат в браузере. Вот что бэкенд получает:
Так что, похоже, как бэкенд получает содержимое формы с именем 'uploadedFile'
. Итак, что я делаю неправильно на бэкэнде? Как я могу добраться до этого загруженного файла в контроллере Silex?
Это все так ужасно запутанно. Помоги пожалуйста!