好的,情况就是这样。与我一起工作的一群人有一个他们管理的教育网站。大多数网站内容都是可以下载的文档形式。用户登录后,就可以查看文档的分类,并进行下载。页面上的下载链接是文档的直接链接。
已经发现的问题是,如果有人拥有直接链接(例如,如果其他人通过电子邮件将其发送给他们),则无需登录即可下载文档。现在,网站上的每个页面都会检查用户是否在允许他们访问页面之前登录,但是 Word 和 PDF 文档当然没有相同的保护,所以如果有人从直接链接下载它们,他们就不会通过该站点。
有什么办法可以保护这些文件不被这种方式下载,或者强制用户先登录?管理站点的人担心没有登录站点的人能够访问他们不应该访问的文档。顺便说一句,该站点是用 ColdFusion 编写的。
编辑:好的,我正在尝试实现史蒂夫的解决方案,如下所示:
<cfheader name="Content-Type" value="unknown">
<cfheader name="Content-Disposition" value="attachment; filename='#resourceName#'">
<cfcontent file="#resourceData.ResourcePath#" type="Application/unknown" deleteFile="no">
它适用于 .jpeg 和 pdf,但对于其他文档类型,如 Word,它会下载一个充满 .xml 文件的压缩文件(特别是名为“_rels”、“docProps”和“word”的子文件夹,其中包含 .xml 文件,以及一个名为“[Content_Types].xml”的附加顶级文件)。如果我将内容类型设置为 Word mimetype,它可以正常下载。有任何想法吗?
编辑:好的,我不知道如何使用“应用程序/未知”作为文件类型来解决问题,但是如果我使用 getPageContext().getServletContext().getMimeType() 获得 mimetype,我可以将其放入类型。不幸的是,我仍然遇到一个问题,即此功能无法为较新的 Office 文档类型检索 mimetypes。我们的服务员正在查看。如果必须,我将设置一些逻辑来检测 .docx/.pptx/.xlsx 文件并使用 getPageContext().getServletContext().getMimeType() 来检测其他文档的 mimetypes。但是任何关于使用“应用程序/未知”进行这项工作的建议都将受到欢迎。