2014-03-25 103 views
3

我使用角度和這個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;。控制檯日誌返回相同的對象,但我得到了以下錯誤:

Error: Argument 2 of FormData.append does not implement interface Blob.

感謝您的任何提示。

回答

4

好的,所以有人給我答案。

在我的情況下,angular.copy()將變量從文件更改爲對象。所以我只是不得不刪除它。

跳它可以幫助。

1

如果您仍想使用angular.copy(),則可以解決此問題。我試過這個,這個工程。

當您嘗試深度複製文件數組時,不是使用angular.copy(),而是使用空數組('[]')對數組進行連接並將結果分配給新數組。

所以,下面一行替換線$scope.files = angular.copy($files);

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

這應該做的副本魔()方法。