【问题标题】:check if the file format is different with the file name extension in Python, Javascript?检查文件格式是否与 Python、Javascript 中的文件扩展名不同?
【发布时间】:2014-08-14 10:50:06
【问题描述】:

我有一个有文件格式验证的上传器(只能上传部分视频格式)。

但是用户可以简单地更改原始文件扩展名并通过验证(例如将file.pdf重命名为file.mov并上传)!

现在我需要检查并验证文件格式是否与文件扩展名匹配。后端是 Python (Django),但我不确定这是否可以通过 Payton、Javascript 或任何其他解决方案来完成。

【问题讨论】:

    标签: javascript jquery python django


    【解决方案1】:

    在python中你可以使用python-magic

    自述文件中的引述:

    python-magic is a python interface to the libmagic file type identification library. libmagic identifies file types by checking their headers according to a predefined list of file types.

    它分析文件头而不是仅使用文件扩展名来识别文件类型。

    用法很简单:

    >>> import magic
    >>> magic.from_file('renamed.pdf')
    'ISO Media, Apple QuickTime movie'
    # More handy
    >>> magic.from_file('renamed.pdf', mime=True)
    'video/quicktime'
    

    【讨论】:

      【解决方案2】:

      如果您想通过 Javascript 执行此操作,您可以获取所选文件的 mime 类型并在前端进行检查。这样做的好处是您不需要将文件上传到服务器进行初始验证。基于this,.mov 文件的 MIME 类型是“video/quicktime”。这对用户来说比更改文件扩展名更难修改。

      还要注意Mathias' answer。在后端服务器中验证上传的文件也很重要。 :)

      这是file validation using Javascript的演示。

      $('#movieFile').change(function() {
          var file = $('#movieFile')[0].files[0];
      
          var filename = file.name;
          var fileMimeType = file.type;
          var fileExtension = filename.split('.').pop();
      
          if (isValidMimeType(fileMimeType)) {
              console.log('good file');
          } else {
              console.log('bad file');
          }
      });
      
      function isValidMimeType(fileMimeType) {
          // mime type of .mov files
          var validFileMimeTypes = [ 'video/quicktime' ];
      
          for (var i = 0; i < validFileMimeTypes.length; i++) {
              if (validFileMimeTypes[i].toLowerCase() === fileMimeType.toLowerCase()) {
                  return true;
              }
          }
          return false;
      }
      

      【讨论】:

        【解决方案3】:

        使用 python-magic 添加到 Mathias 的答案中,您可以这样做

        file_type = magic.from_buffer(upload.file.read(1024), mime=True)
        

        这不需要保存文件来获得它的mime

        【讨论】:

          猜你喜欢
          • 2020-03-30
          • 2022-12-01
          • 1970-01-01
          • 2012-12-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多