我的网站上有一个包含PDF文件的目录,每个文件都使用其记录的ID命名(即12345.pdf,67891.pdf)。
我想通过简单地输入文件的URL来阻止用户直接访问PDF文件。我想强制用户使用页面脚本来访问该文件(例如/ getFile?12345,其中getFile脚本将检索文件并显示)。
我知道使用Apache你可以修改htaccess文件以限制某些文件类型的直接访问,但是我使用的是GlassFish 3.1.2,并且相对较新,我找不到任何关于完成类似内容的事情。有谁知道怎么做?
答案 0 :(得分:0)
我正在处理确切的问题,而且我有一个适用的解决方案(对我而言)。
第一步确认您在Apache上使用GlassFish或在IIS上使用GlassFish。
这对我有用。我有IIS重定向访问文件所在的目录使用web.config。目录和文件中有一个重定向:
<rule name="Protect files and directories from prying eyes" stopProcessing="true">
<match url="(myPDFDirectory)" />
<conditions logicalGrouping="MatchAll" trackAllCaptures="false" />
<action type="CustomResponse" statusCode="403" subStatusCode="0" statusReason="Forbidden" statusDescription="Access is forbidden." />
</rule>
或者您可以将它们重定向到自定义用户捕获内容。
在htaccess中它会是这样的(我不擅长Apache,所以你必须得到确认)。
RewriteRule ^/myPDFDirectory/(.*)$ http://website.com/signUp.cfm [R=301,L]
我可能需要回顾这两个例子中的第一个,但你明白了。
现在进行文件传递。
我已经看到这样做了标题内容方法。但不幸的是,服务器发生了一些事情,它无法访问带有PDF文件的目录。所以我能够通过HTTP访问文件。有了重写规则,就无法“直接”访问外部用户导航的文件目录,但是,当我通过HREF调用PDF进行下载时,它可以正常工作。我使用新的HTML 5版本的HREF与下载参数。它强制下载
<a href="/myPDFDirectory/realName.pdf" download="2014Expenses.pdf">Download Your Expense Report</a>
还有其他方法可以为用户提供他或她的文件以供下载,例如cfheader / cfcontent方法,但我没有正确设置目录访问权限,而且服务器是我不管理的服务器所以我不得不提出来用非常规的东西:/
我希望这有用......
答案 1 :(得分:0)
我按照Avery Martell的建议,在网络根目录之外查看。我最终设置了一个NFS设备来存储文件并设置适当的权限。经过一些额外的研究,这是一种常见的最佳实践,特别是对于我的需求,即存储文档&gt; 1MB。在该大小下,存储在db中的好处开始减少,并且将它们存储在web根目录内的目录中是不必要的复杂。我希望这有助于那些有类似需求的人。