Я пытаюсь загрузить файл на сервер Slim Framework, используя PUT.Я успешно создал POST-маршрут, где я могу без проблем получить загруженный файл, но если я отправлю тот же запрос на тот же маршрут, с той лишь разницей, что метод, я получу файл из POST, null из PUT.
Вот мой маршрутизатор:
$app->put('/users/{id}', 'RideTimeServer\API\Controllers\UserController:update');
$app->post('/users/{id}', 'RideTimeServer\API\Controllers\UserController:update'); // DEBUG:
А затем запрос просто передается через контроллер на processPicture
метод:
protected function processPicture(Request $request): string
{
// First look for an uploaded picture
if (!empty($request->getUploadedFiles()['picture'])) {
// http://www.slimframework.com/docs/v3/cookbook/uploading-files.html
$uploadedFile = $request->getUploadedFiles()['picture'];
/**
* { file, name, type }
*/
var_dump($uploadedFile);
// Then check URL
} elseif (!empty($request->getParsedBody()['picture'])) {
$url = $request->getParsedBody()['picture'];
if (!filter_var($url, FILTER_VALIDATE_URL)) {
throw new UserException('Invalid picture URL', 400);
}
var_dump($url);
} else {
// $this->container['logger']->addInfo('Submitted user with no picture');
var_dump('Submitted user with no picture');
var_dump($request->getUploadedFiles());
var_dump($request->getParsedBody());
}
return '';
}
Теперь, если я отправлю
curl -X PUT \
http://localhost/ridetime/api/users/1 \
-H 'Authorization: Bearer t0k3n' \
-H 'cache-control: no-cache' \
-H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' \
-F 'picture=@/home/asdf/Tmp/Screenshot_20190125_005049.png'
я получаю Submitted user with no picture
, []
и null
от var_dump
, но если я изменю запрос на POST:
curl -X POST \
http://localhost/ridetime/api/users/1 \
-H 'Authorization: Bearer t0k3n' \
-H 'cache-control: no-cache' \
-H 'content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' \
-F 'picture=@/home/asdf/Tmp/Screenshot_20190125_005049.png'
Я получу информацию о загруженном файле,
Я попытался заменить -F 'picture=@...png
на --upload-file ./file.png
, и результат был таким же.