Javascript Angular js fileupload仅允许图像扩展

Javascript Angular js fileupload仅允许图像扩展,javascript,angularjs,upload,fine-uploader,Javascript,Angularjs,Upload,Fine Uploader,这是我上传图像配置文件的指令。它工作得很好,但我想知道的是,我们如何过滤这个指令以只允许特定的扩展,因为我只允许图像。顺便说一下,我正在使用fineupload。请随意询问图像url下面的代码是e.target.result app.directive('uploadProfile', function () { return function (scope, element, attrs, $window) { var $uploadCrop;

这是我上传图像配置文件的指令。它工作得很好,但我想知道的是,我们如何过滤这个指令以只允许特定的扩展,因为我只允许图像。顺便说一下,我正在使用fineupload。请随意询问图像url下面的代码是e.target.result

app.directive('uploadProfile', function () {
        return function (scope, element, attrs, $window) {
            var $uploadCrop;

            function readFile(input) {
                if (input.files && input.files[0]) {
                    var reader = new FileReader();

                    reader.onload = function (e) {
                        $('.cropper').addClass('ready')
                        $window.alert("hi")
                        $uploadCrop.croppie('bind', {
                            url: e.target.result

                        }).then(function () {
                            console.log("do nothing")
                        });
                    }

                    reader.readAsDataURL(input.files[0]);
                }
                else {
                    swal("Sorry - you're browser doesn't support the FileReader API");
                }
            }


            $(element).on("change", function () {
                readFile(this)
            });

            $uploadCrop = $('.cropper').croppie({
                url: "/static/img/yahshua.jpg",
                viewport: {
                    width: 170,
                    height: 170,
                    type: 'circle',
                },
                enableExif: true,
                enableZoom: true,
                enforceBoundary: false
            });

            $(element).on('change', function () { readFile(this); });

            $('#cropImage').on('click', function (ev) {
                $uploadCrop.croppie('result', {
                    type: 'base64',
                    size: 'viewport'
                }).then(function (resp) {
                    scope.record = {}
                    scope.record.cropped = resp
                    scope.main.upload_profile(resp)
                });
            });
        };
    })

I您的html输入类型为“file”,您可以添加“accept”属性以将文件类型限制为仅图像:


I您的html输入类型为“file”,您可以添加“accept”属性以将文件类型限制为仅图像:


查看了您的所有代码并发表了评论
解决方案是使用只需将文件输入属性设置为
accept=“image/*”


查看您的所有代码并发表评论
解决方案是使用只需将文件输入属性设置为
accept=“image/*”

app.directive('uploadProfile', function () {
  return function (scope, element, attrs, $window) {
    var $uploadCrop;

    function readFile(input) {
      // if (input.files && input.files[0]) {
      // files are always avalible nowdays
      if (input.files[0]) {
        // You don't need the FileReader... (we will use object urls)
        // var reader = new FileReader();

        // reader.onload = function (e) {
          $('.cropper').addClass('ready')
          $window.alert('hi')
          $uploadCrop.croppie('bind', {
            url: URL.createObjectURL(input.files[0])
          }).then(function () {
            console.log("do nothing")
          });
        // }

        // reader.readAsDataURL(input.files[0]);
      }
      // All browswers support FileReader nowdays...
      // else {
      //   swal("Sorry - you're browser doesn't support the FileReader API");
      // }
    }

    // set file attribute's accept to "image/*" 
    // This will only allow users to only select images
    element.accept = 'image/*'

    $(element).on("change", function () {
      readFile(this)
    });

    $uploadCrop = $('.cropper').croppie({
      url: "/static/img/yahshua.jpg",
      viewport: {
        width: 170,
        height: 170,
        type: 'circle',
      },
      enableExif: true,
      enableZoom: true,
      enforceBoundary: false
    });

    // You are already doing this above
    // $(element).on('change', function () { readFile(this); });

    $('#cropImage').on('click', function (ev) {
      $uploadCrop.croppie('result', {
        type: 'base64', // I would encurage you to use blob & FormData instead
        size: 'viewport'
      }).then(function (resp) {
        scope.record = {}
        scope.record.cropped = resp
        scope.main.upload_profile(resp)
      });
    });
  };
})