使用angular和angular-file-upload上传文件

时间:2014-03-25 10:42:48

标签: angularjs file-upload

我正在使用angular和plugin来上传文件。它基本上开始处理文件上传,但我很想开始提交表单。

我试过了:

HTML

<form>
   <input type="file" ng-file-select="onFileSelect($files)">
   <input type="submit" ng-click="sendMail()" value="send">
</form>

JS

app.controller('mail', function ($scope, $http, $upload) {

    $scope.onFileSelect = function($files) {
        $scope.files = angular.copy($files);
        console.log($scope.files); // Returns my object (size, type, name...)
    }

    $scope.sendMail = function() {
    var file = myFile;
    console.log(file);             // Still returns my object
        $scope.upload = $upload.upload({
        url: 'server/mail.php',
        data: { 
            // stuff 
        },
        file: file,                // Returns : Error: does not implement Blob
        }).success(function(data, status, headers, config) {
            console.log(data);
        });
    }

})

我试图在第一个函数中创建一个像myFile = $scope.files;这样的全局变量。然后在第二个中调用它:var file = myFile;。控制台日志返回相同的对象,但我收到以下错误:

  

错误:FormData.append的参数2没有实现接口   斑点。

感谢任何提示。

2 个答案:

答案 0 :(得分:4)

好的,有人给我答案。

在我的例子中,angular.copy()将变量从 File 更改为 Object 。所以我只需将其删除。

跳起来可以提供帮助。

答案 1 :(得分:1)

如果您仍想使用angular.copy(),则可以解决此问题。我试过这个,这很有效。

当您尝试深层复制文件数组时,不要使用angular.copy(),而是使用空白数组(&#39; []&#39;)连接该数组,并将结果分配给新数组

因此,请将以下行替换为$scope.files = angular.copy($files);行:

$scope.files = ($files || []).concat([]);

这应该是copy()方法的神奇之处。