【问题标题】:How to verify downloaded file format如何验证下载的文件格式
【发布时间】:2011-10-27 17:08:17
【问题描述】:

我的服务器可以存储带有 *.pdf 扩展名的文件。 我应该检查文件格式还是正确的扩展名是否足够?

【问题讨论】:

    标签: ruby-on-rails pdf file-format


    【解决方案1】:

    扩展名不足以证明文件具有正确的格式。您可以将任何名称命名为 .pdf。在打开和读取文件时会检查格式(无论是通过应用程序本身还是其他一些验证方式)。

    【讨论】:

      【解决方案2】:

      非常感谢,鲍勃!你的解决方案很棒。我解析远程文件,并稍微更改您的 reg exp:

      file_url = 'http://...../file_name.pdf'
      file = open(file_url)
      contents = file.read(10)
      is_pdf = (contents =~ /\%PDF-\d+\.?\d+/) == 0
      render :text => is_pdf
      

      【讨论】:

        【解决方案3】:

        Shadowland 是对的,快速检查会在以后节省很多痛苦。如果每次客户说“我确实使用了 PDF。我拿了我的 Word 文件,将名称更改为 'pdf',然后邮寄了它!”时,我都有一毛钱。喝杯咖啡就够了。

        如果您不想在上传时使用成熟的 PDF 处理 gem,可以快速检查一下。根据Adobe's PDF spec,每个PDF文件都应该以

        开头
        %PDF−<version-number>
        

        例如,PDF 版本 1.7 文件将以

        开头
        %PDF−1.7
        

        如果不过度设计面向未来的解决方案(当我们达到 PDF 规范版本 10.0 时会发生什么?),我会尝试阅读文件的开头并确保它的形式...

        %PDF-<digit>.<digit>
        

        或者,用 Ruby 编写(使用错误安全块和正则表达式)...

        contents = File.open('Full_path_to_my_file', 'r') { |f| f.read(8)}
        is_pdf = (contents =~ /\%PDF-\d\.\d/) == 0
        

        【讨论】:

        • 我拿了我的 Word 文件,改名为“pdf”,然后邮寄了! +1))
        • Adobe Acrobat 不要求 PDF 文件以 %PDF-d.d 开头。它可以是前 1024 个字节中的任何位置。
        猜你喜欢
        • 2011-01-26
        • 1970-01-01
        • 2013-02-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-10
        • 2018-05-30
        相关资源
        最近更新 更多