Angular上传图片并显示给用户

时间:2017-03-12 23:17:49

标签: javascript angularjs file-upload upload form-data

我希望实现一个用户选择图片的用户界面,该图片会立即显示给他们进行审核。用户必须单击“提交”才能将图像上传/保存到其个人资料中。

我遇到“立即显示回用户部分”的问题。

我使用带有以下标记的角度FormData&控制器:

MARKUP

<input id="chooseFile" type="file" file-model="picFile" />

<img src="{{uploadedImage}}" /> <!-- this populates with filename but what is the path?? -->

CONTROLLER

angular.element('#chooseFile').change(function(){

        var file = $scope.picFile; // this comes up "undefined" since file is still uploading when this is fired

        $scope.uploadedImage = file.name;

});

我对上述代码有2个主要问题(在评论中描述):

1)在控制器中,file显然会出现undefined,因为即使是最小的文件也需要上传0秒,而回调几乎是瞬间触发的。我使用$timeout让它工作,但这有点蹩脚的黑客。如何在文件上传之前等待回调?

2)想法是上传文件并使用Angular的数据绑定将其显示在img标签中。这有效,因为src填充了文件名,但是img的路径是什么。缓存中的一些临时位置还是什么?显然我还没有设置移动文件的路径。

任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:1)

我还需要这个功能,一些我如何设法立即显示图像。

&#13;
&#13;
angular.module('HelloWorldApp', [])
   .controller('HelloWorldController', function($scope) {
       $scope.uploadavtar = function(files) {
        //var fd = new FormData();
        //Take the first selected file
        //fd.append("file", files[0]);
        
        var imagefile = document.querySelector('#file');
                if (imagefile.files && imagefile.files[0]) {
                    var reader = new FileReader();
                    reader.onload = function (e) {
                        $('#temp_image')
                            .attr('src', e.target.result);
                    };
                    reader.readAsDataURL(imagefile.files[0]);
                    this.imagefile = imagefile.files[0];
                }else{
                    console.log("Image not selected");
                }
        
        
      }
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="HelloWorldApp">
    <div ng-controller="HelloWorldController">
        <input type="file" id="file" onchange="angular.element(this).scope().uploadavtar(this.files)"/>
    </div>
      <img src="" id="temp_image" width="100">
    <div>
    </div>
</div>
&#13;
&#13;
&#13;

我使用的是laravel + Angularjs,因此另一个相关的商店图片帖子是:https://stackoverflow.com/a/34830307/2815635