用户登录我们的系统时,可以创建CSV报告。然后,该报告可以由用户下载。目录结构是这样的:
siteroot.com/user/
siteroot.com/user/login/
siteroot.com/user/login/downloads/[file].csv
/ login /目录只能通过登录用户访问。但是,如果有人知道URL,可以直接转到CSV文件的URL并抓取该文件:
siteroot.com/user/login/downloads/myfile.csv
有没有比将它们移出根目录然后使用cfdirectory / cfheader / cfcontent将CSV文件从非IIS目录中拉出并提供给用户更好的(简单)解决方案?
答案 0 :(得分:2)
请勿将这些文件放在可通过网络访问的文件夹中。
如果要创建不需要保留的数据导出,请在temp文件夹(也是非公共访问的文件夹)中创建文件,然后使用<cfcontent>
将文件推送到浏览器,这将向用户显示一个下载对话框。作为此过程的一部分,您将从服务器上删除文件,因此,每当有人请求导出时,都将运行此过程。
这可以使您的服务器保持干净,并使文件保持登录状态。这是我为stub out this process创建的要点。它使用<cfspreadsheet>
完成导出。这是代码的核心:
<cfspreadsheet action="write" filename="#config.full_temp_name#" query="config.q" />
<cfspreadsheet action="read" src="#config.full_temp_name#" name="local.xls" />
<cffile action="delete" file="#config.full_temp_name#" />
<cfif len(arguments.fileName) GT 0>
<cfheader name="content-disposition" value="attachment; filename=#arguments.fileName#.#config.extension#" />
<cfelse>
<cfheader name="content-disposition" value="attachment; filename=#config.temp_name#.#config.extension#" />
</cfif>
<cfcontent type="application/msexcel" variable="#spreadsheetReadBinary(local.xls)#" reset="true" />