Как сделать запросы POST с API FormData

Я хочу передать имя пользователя и объект form_data в файл php с помощью http.post
когда я передаю только form_data, это работает моя загрузка изображений. но я хочу передать и другую информацию, такую ​​как имя пользователя. Пожалуйста, помогите мне, как передать другие данные в http.post
А вот и мой файл php.

<?php include "connectdb.php";
$data=json_decode(file_get_contents("php://input"));
$name=$dbhandle->real_escape_string($data->susername);
if (!empty($_FILES)) {
$date=2;
$path = 'fooditem/'. $_FILES['file']['name'];
if (move_uploaded_file($_FILES['file']['tmp_name'],$path)) {
$query="INSERT INTO `login`(`id`,`type`,`img`) VALUES('".$name."','".$date."','".$_FILES['file']['name']."')";
if($dbhandle->query($query)){
echo 'File Uploaded';
}
else
echo 'File Uploaded But Not Saved';
}
}else{
echo 'Some Error';
}
myapp.directive("fileInput",function($parse){
return{
link: function($scope,element,attrs){
element.on("change",function(event){
var files = event.target.files;
$parse(attrs.fileInput).assign($scope, element[0].files);
$scope.$apply();
// console.log(files[0].name);
});
}
}
});
myapp.controller("myController",function($scope,$http){
$scope.signup = function(){

var form_data = new FormData();
angular.forEach($scope.files,function(file){
form_data.append('file',file);
});
$http.post("picupload.php",{'susername':$scope.susername,form_data})
.then(function(response){
console.log(response);
})
});
<input type="text" ng-model="username" name="username">
<input type="file" file-input="files" accept="image/*" />
<input type="submit" value="SIGN UP" ng-click="signup()"name="signup_btn" class="btn btn-primary">

1

Решение

Вы можете добавить что-то вроде этого:

 myapp.controller("myController",function($scope,$http){
$scope.signup = function(){
var form_data = new FormData();
angular.forEach($scope.files,function(file){
form_data.append('file',file);
});
form_data.append('susername',$scope.susername);  // new line
var config = {headers: { 'Content-type': undefined } };
$http.post("picupload.php",form_data, config)
.success(function(response){
alert(response);
});
}

Я не уверен насчет PHP, но после поиска в Google я обнаружил, что в php ‘susername’ можно получить, как показано ниже:

$_POST['susername'];
3

Другие решения

Как сделать POST-запросы с помощью API FormData

При публикации объектов, созданных API FormData, важно установить Content-type заголовок к undefined,

$scope.signup = function(){

var form_data = new FormData();
angular.forEach($scope.files,function(file){
form_data.append('file',file);
});

form_data.append('susername', $scope.susername);

var config = {headers: { 'Content-type': undefined } };

return $http.post("picupload.php",form_data, config)
.then(function(response){
console.log(response.data);
return response.data;
});
};

Также Объект FormData не может быть сериализовано в Строка JSON оно должно быть отправлено XHR API в одиночестве. Добавьте все необходимые данные в объект FormData.

Когда API отправки XHR размещает объект, созданный API FormData, автоматически устанавливает заголовок типа контента multipart/form-data с надлежащим граница инкапсуляции и кодирует данные, используя кодировка base64.

Обычно $ http сервис переопределяет XHR API устанавливает заголовок типа контента application/json, Установка заголовка типа контента на undefined позволяет XHR API свободно устанавливать заголовок правильно.


На стороне сервера используйте:

$_POST['susername'];

получить элемент данных.

2