使用angular上传文件的php后端

时间:2016-10-12 15:40:07

标签: php angularjs file-upload

我让部分文件上传过程正常工作,唯一让我无法弄清楚的是将其保存在数据库中的后端。

所以我的HTML ...

<input type="file" name="file" id="thefile" multiple ng-files="getTheFiles($files)"/>
<input name="submit" type="submit" ng-click="uploadFiles()" value="Submit">

这是控制器......

app.controller('import', function($scope, $http) {
    var formdata = new FormData();
    $scope.getTheFiles = function ($files) {
        angular.forEach($files, function (value, key) {
            formdata.append(key, value);
        });    
    };
    $scope.uploadFiles = function () {
            var request = {
                method: 'POST',
                url: '../submit.php',
                data: formdata,
                headers: {
                    'Content-Type': undefined
                }
            };

            // SEND THE FILES.
            $http(request)
                .success(function (d) {
                    alert(d);
                })
                .error(function () {
                });
        }
});

这似乎有用,当我console.log(formdata)我得到一个对象时。但是现在,我需要将它保存在数据库和服务器中。我试过的唯一的PHP代码是保存文件的通常方式......

if(isset($_FILES['file'])) {

    $file = rand(1000,100000)."-".$_FILES['file']['name'];
    $file_loc = $_FILES['file']['tmp_name'];
    $file_size = $_FILES['file']['size'];
    $file_type = $_FILES['file']['type'];
    $folder="uploads/";

    move_uploaded_file($file_loc,$folder.$file);
    $sql="INSERT INTO tbl_uploads(file,type,size) VALUES(?,?,?)";
    $statement = $conn->prepare($sql);
    $statement->execute(array($file,$file_type,$file_size));

但这并没有做任何事情。我也发现很难调试,因为我的角度打印success但我可以在服务器端echo,因为我正在向它发出http请求。

1 个答案:

答案 0 :(得分:0)

您缺少的是角度会自动转换您的请求数据,而FormData则不需要这些数据 您可以通过向请求对象添加transformRequest: angular.identity,来停止此操作。