AngularJs上传多个文件。然后

时间:2017-06-30 15:59:48

标签: angularjs file-upload upload

文件的多次上传适用于angularjs,但我无法在.then()函数中获取文件名。

这是我的上传文件功能:

    $scope.uploadFile = function(files,destinationPhp) {

    $scope.montrerLoader = true;

    for (var x=0;x<files.length;x++){

        var fd = new FormData();
        //Take the first selected file
        fd.append("file", files[x]);

        console.log(files[x].name);
        var uploadUrl = destinationPhp;

        $http.post(uploadUrl, fd, {
            withCredentials: true,
            headers: {'Content-Type': undefined },
            transformRequest: angular.identity
        }).then(function(data){ 
            $scope.montrerLoader = false;
            if(data.data.reponse=='ok'){

                if(destinationPhp=='uploadFichier.php'){
                    Notification.success('Fichier transféré!');
                    $scope.rendezVous.fichiers.push({'nom':files[x].name});
                }
            }
            else{

                Notification.error(data.data.reponse);
            }

        });

    }

};

效果很好,文件上传到我的服务器目录,但问题是我需要的这行!:

$scope.rendezVous.fichiers.push({'nom':files[x].name});

我发现了这个错误:

TypeError: files[x] is undefined

我已经尝试了很多,比如尝试将文件名放入TEMP var,它永远不会被识别,或者最终总是推送相同的名称文件(它不是逻辑)。

在上传到$ scope.rendezVous之后,您是否知道如何推送我的文件名?

iller是这一行:

 console.log(files[x].name);

在我的firebug控制台中显示权限文件名!!但只要我尝试在里面使用.then(),那它就不起作用了!

1 个答案:

答案 0 :(得分:0)

您正在尝试for循环中的异步调用,因此您必须使用IIFE。因此,在IIFE中包含$ http将让它在for循环和放大器的每个i值上运行。文件对象在其回调中不会被定义。检查此样本

for (var index = 1; index <= files.length; index++) {      
    (function(index) {
        $timeout(function() { 
        console.log("index : "+index); 

         alert("file name : "+files[index-1].name);
        }, index * 500);
    })(index);
}

http://plnkr.co/edit/7ZclGB93Soq5Ce8pFmkQ?p=preview

这里我使用$ timeout和&amp;添加了模拟异步调用。然后在内部使用它与IIFE结构循环。您可以在注释掉该异步调用的IIFE包装器时检查您的条件。