如何验证下载的文件格式

发布于 2024-12-12 01:18:44 字数 62 浏览 0 评论 0 原文

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

My server can store files with *.pdf extension.
Should I check the file format or right extension is enough?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

半世蒼涼 2024-12-19 01:18:44

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

Extension isn't sufficient to prove that a file has the right format. You could name anything .pdf. It's in the opening and reading of the file that the formatting is checked (whether by the application itself or some other means of verifying).

烟雨扶苏 2024-12-19 01:18:44

非常感谢,鲍勃!你的解决方案很棒。我解析远程文件,并稍微更改您的 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

Thanks a lot, Bob! Your solution is great. I parse remote file, and change your reg exp a bit:

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
时光与爱终年不遇 2024-12-19 01:18:44

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

如果您不想在上传时使用成熟的 PDF 处理 gem,可以快速检查一下。根据 Adobe 的 PDF 规范,每个 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

Shadowland is right, a quick check will save a lot of pain later. If I had a dime for every time a customer said "I DID use a PDF. I took my Word file, changed the name to 'pdf,' and mailed it!" I'd have enough for a cup of coffee.

Here's a quick check, if you don't want to use a full-blown PDF-handling gem at upload time. According to Adobe's PDF spec, every PDF file should begin with

%PDF−<version-number>

For example, a PDF version 1.7 file will begin with

%PDF−1.7

Without over-engineering a future-proof solution (what happens when we reach PDF spec version 10.0?), I'd try reading the beginning of the file and make sure that it's of the form...

%PDF-<digit>.<digit>

Or, to write that in Ruby (using error-safe blocks and regexp's,)...

contents = File.open('Full_path_to_my_file', 'r') { |f| f.read(8)}
is_pdf = (contents =~ /\%PDF-\d\.\d/) == 0
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文