Ответ 1
Если вы хотите иметь доступ к содержимому файла с помощью $app->request->post('content');
, ваш запрос curl должен использовать <
вместо @
для поля content
,
curl -i http://localhost/test/index.php -X POST -F "name=file.png" \
-F "content=</var/www/html/test/file.png"
Из справочной страницы curl:
Чтобы заставить 'content', чтобы быть файлом, префикс имени файла знаком @. Чтобы просто получить часть содержимого из файла, префикс имени файла с символом <. Разница между значениями @и < это то, что @заставляет файл прикрепляться к сообщению в качестве загрузки файла, в то время как < создает текстовое поле и просто получает содержимое для этого текстового поля из файла.
Используя @
, вы пометили это поле как файл. Технически это добавляет заголовок Content-Disposition
в поле (RFC 2388, если вам интересно). PHP обнаруживает это и автоматически сохраняет поле внутри $_FILES
вместо $_POST
, как заметил в комментарии Рафаэль Мали, поэтому вы не можете получить доступ к содержимому с помощью $app->request->post
.
Вам следует подумать о том, чтобы переключиться на использование $_FILES
в вашем бэкэнд, если вы хотите поддерживать загрузку с использованием элементов и форм браузера <input type=file>
. Они всегда устанавливают заголовок Content-Disposition
.