javascript php angularjs form-data angularjs-fileupload

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''];