У меня есть приложение Symfony , которое использует AngularJS на внешнем интерфейсе для загрузки файлов с помощью ajax с помощью метода POST
.
Рабочий метод POST
Данные добавляются как FormData
, а некоторая магия angular.identity
используется для автоматического заполнения правильного application/x-www-form-urlencoded; charset=UTF-8
типа содержимого:
$scope.fileUpload = function (file) {
var fd = new FormData();
fd.append("title", file.title);
fd.append("file", $scope.file);
$http.post('example/upload', fd, {
transformRequest: angular.identity,
headers: {'Content-Type': undefined}
}).then({
// do something
});
};
Это работает, как и ожидалось, позволяя мне получить доступ к опубликованным переменным в моем контроллере:
// Expects data from a post method
public function postFile(Request $request)
{
$title = $request->get('title');
/** @var $file UploadedFile */
$file = $request->files->get('file');
// data success, all is good
}
Неудачный метод PUT
Однако, когда я делаю то же самое, используя метод PUT
, я получаю 200
успех, но нет доступных данных:
$scope.fileUpload = function (file) {
var fd = new FormData();
fd.append("title", file.title);
fd.append("file", $scope.file);
$http.put('example/update', fd, {
transformRequest: angular.identity,
headers: {'Content-Type': undefined}
}).then({
// do something
});
};
// Expects data from a put method
public function putFile(Request $request)
{
$title = $request->get('title');
/** @var $file UploadedFile */
$file = $request->files->get('file');
// the request parameters and query are empty, there is no accessible data
}
Вопрос в том, почему это происходит с PUT
, а не POST
и как я могу обойти это? Я мог бы использовать POST
и для обновления файла, но это хакерское решение, которое я бы хотел избежать.
Есть похожие вопросы, но нет подходящих решений, которые решают проблему при использовании PUT
:
Отправка файла с использованием метода PUT Angularjs
Загрузка изображения AngularJS с PUT, возможно, как?
Загрузка файла Angularjs in put не работает