1

当我只传递 form_data 时,我想使用 http.post 将用户名和 form_data 对象传递给 php 文件,它适用于我的图片上传。但我也想传递一些其他信息,如用户名。请帮助我如何在 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">
4

2 回答 2

3

您可以添加如下内容:

 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,但在谷歌搜索后我发现在 php 'susername' 中可以检索如下:

$_POST['susername'];
于 2017-04-17T16:16:54.413 回答
2

如何使用 FormData API 发出 POST 请求

发布由FormData API创建的对象时,将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 对象。

XHR 发送 API发布由FormData API创建的对象时,它会自动将内容类型标头设置为multipart/form-data具有适当的封装边界,并使用base64 编码对数据进行编码。

通常$http 服务会覆盖XHR API将内容类型标头设置为application/json. 将内容类型标头设置为undefined允许 XHR API 自由地正确设置标头。


更新

在服务器端使用:

$_POST['susername'];

接收数据项。

于 2017-04-17T16:26:40.883 回答