javascript - Cómo hacer solicitudes POST con la API FormData
php angularjs (2)
Quiero pasar el nombre de usuario y el objeto form_data al archivo php usando http.post cuando paso solo form_data funciona mi carga de imágenes. pero quiero pasar otra información como nombre de usuario también. por favor, ayúdenme a pasar otros datos en http.post Y aquí está mi archivo 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">
Cómo hacer solicitudes POST con la API FormData
Al publicar objetos creados por la
API FormData
, es importante establecer el encabezado
Content-type
en
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;
});
};
Además, un objeto FormData no se puede serializar en una cadena JSON , debe ser enviado solo por la API XHR . Agregue todos los datos necesarios al objeto FormData.
Cuando la
API de envío XHR
publica un objeto creado por la
API FormData
, establece automáticamente el encabezado de tipo de contenido en
multipart/form-data
con un
límite de encapsulación
adecuado y codifica los datos utilizando
codificación base64
.
Normalmente, el
servicio $ http
anula la
API XHR y
establece el encabezado del tipo de contenido en
application/json
.
Establecer el encabezado de tipo de contenido en
undefined
permite a la API XHR la libertad de establecer el encabezado correctamente.
Actualizar
En el lado del servidor, use:
$_POST[''susername''];
para recibir el elemento de datos.
Puedes agregar algo como esto:
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);
});
}
No estoy seguro acerca de PHP, pero después de buscar en Google descubrí que en php ''susername'' se puede recuperar de la siguiente manera:
$_POST[''susername''];