【发布时间】:2011-10-27 17:08:17
【问题描述】:
我的服务器可以存储带有 *.pdf 扩展名的文件。 我应该检查文件格式还是正确的扩展名是否足够?
【问题讨论】:
标签: ruby-on-rails pdf file-format
我的服务器可以存储带有 *.pdf 扩展名的文件。 我应该检查文件格式还是正确的扩展名是否足够?
【问题讨论】:
标签: ruby-on-rails pdf file-format
扩展名不足以证明文件具有正确的格式。您可以将任何名称命名为 .pdf。在打开和读取文件时会检查格式(无论是通过应用程序本身还是其他一些验证方式)。
【讨论】:
非常感谢,鲍勃!你的解决方案很棒。我解析远程文件,并稍微更改您的 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
【讨论】:
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
【讨论】: