我正在使用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没有实现接口 斑点。
感谢任何提示。
答案 0 :(得分:4)
好的,有人给我答案。
在我的例子中,angular.copy()将变量从 File 更改为 Object 。所以我只需将其删除。
跳起来可以提供帮助。
答案 1 :(得分:1)
如果您仍想使用angular.copy(),则可以解决此问题。我试过这个,这很有效。
当您尝试深层复制文件数组时,不要使用angular.copy(),而是使用空白数组(&#39; []&#39;)连接该数组,并将结果分配给新数组
因此,请将以下行替换为$scope.files = angular.copy($files);
行:
$scope.files = ($files || []).concat([]);
这应该是copy()方法的神奇之处。