如何在Angular JS中检查上传文件的类型?

时间:2015-05-10 14:43:33

标签: javascript angularjs

我在Angular JS中使用库Angular File Uploader。以下是filters,允许将文件类型设置为上传。 我这样做:

uploader.filters.push({
    name: 'imageFilter',
    fn: function (item /*{File|FileLikeObject}*/, options) {
    var type = '|' + item.type.slice(item.type.lastIndexOf('/') + 1) + '|';
         return '|doc|txt|docx|xml|pdf|djvu'.indexOf(type) !== -1;
   }
});

问题是用户可以更改扩展文件,例如将*.exe更改为*.pdf,然后Angular上传程序会将文件添加到队列上传。

我如何在模板中显示信息哪里是PDF和txt文件?

1 个答案:

答案 0 :(得分:1)

您已经确定了将文件上传到服务器的主要问题之一(恭喜!):)

除了开玩笑和轻浮之外,我还没有听说过在上传前使用AngularJS验证文件的优雅或可靠的方法(如你所知,AngularJS受到JavaScript本身提供的API的限制,因为AngularJS是一个JavaScript框架。)

this answer to "How to check file MIME type with javascript before upload?"所述,您可以在上传之前检查客户端上文件的MIME类型。

但是,由于多种原因检查客户端上的文件存在限制,包括:

  1. 用户可以更改有关文件的信息(例如,如您所指出的,扩展名称)
  2. 某些浏览器对API的支持有限,这些API可能使您能够首先检查客户端上的文件
  3. 这就是为什么最好的办法是检查服务器上的文件

    一种方法(在很多可能的方法中)是使用PHP,并执行类似于this answer to "How to check file types of uploaded files in PHP?"建议的方法,即:

      

    查看mime_content_typeFileinfo。这些都是内置的PHP   通过查看内容来确定文件类型的命令   的文件。另外还要查看上面两页的评论   其他一些好的建议。

         

    我个人幸运地使用了本质上的东西   system(“file -bi $ uploadedfile”),但我不确定这是不是最好的   方法

    依靠服务器(而不是客户端)检查文件的优势您只受服务器可以使用的API(客户端)的限制用户无法控制。)