我正在为我们的办公室创建一个应用程序,它允许办公室中经过身份验证的用户为客户端上传文件,创建下载文件的链接列表,并通过电子邮件将链接列表发送给客户端。
当办公室中的用户登录时,会在他们的会话范围内为他们分配一个UUID。该UUID将成为存储上传文件的目录名。
有时,我需要清除旧文件并删除目录,但当发生这种情况时,客户端可能会尝试从旧链接重新下载文件。
在ColdFusion 9中,我如何捕捉到这一点并将其发送到错误页面?我还希望在下载开始后使用类似的代码来重定向用户,这样他们就不会在下载过程中只是坐在空白页面上。
这是我的强制下载页面,它接受一个文件夹名称变量和一个文件名变量来提供文件。
<cfset folder = #URL.folder#>
<cfset FileDownload = #URL.file#>
<cfset exten = ListLast(FileDownload, ".")>
<cfswitch expression="#exten#">
<cfcase value="zip"><cfset content_type = "application/zip, application/x-zip, application/x-zip-compressed, application/octet-stream, application/x-compress, application/x-compressed, multipart/x-zip"></cfcase>
<cfcase value="ai"><cfset content_type = "application/illustrator"></cfcase>
<cfcase value="eps"><cfset content_type = "application/illustrator, application/octect-stream"></cfcase>
<cfcase value="pdf"><cfset content_type = "application/pdf, application/x-pdf, application/acrobat, applications/vnd.pdf, text/pdf, text/x-pdf"></cfcase>
<cfcase value="psd"><cfset content_type = "image/photoshop, image/x-photoshop, image/psd, application/photoshop"></cfcase>
<cfcase value="jpg"><cfset content_type = "image/jpeg"></cfcase>
<cfcase value="png"><cfset content_type = "image/png"></cfcase>
<cfcase value="tif"><cfset content_type = "image/tiff"></cfcase>
<cfdefaultcase><cfset content_type = "image/jpeg"></cfdefaultcase>
</cfswitch>
<cfset fileToGetSizeOf = expandPath("./#folder#/#FileDownload#") />
<cfoutput><cfheader name="content-disposition" value="attachment;filename=#FileDownload#"><cfheader name="content-length" value="#getFileInfo(fileToGetSizeOf ).size#" />
<cfcontent type="#content_type#" file="#ExpandPath("./#folder#")#/#FileDownload#" deletefile="#delete_file#"></cfoutput>发布于 2012-06-26 14:29:09
这里有三个您想要实现的目标:
无论如何,对于所有这些,都有非常简单和可靠的解决方案。
您应该将文件列表保存在数据库中,因此每条记录可能包括:
注意: 3-4可以作为单列('path/filename.ext')来完成,因为路径无论如何都是临时的。
因此,当您的应用程序执行creates a list of links to download the files and emails the client with the list of links.时,它还会将每个文件记录到数据库中。现在,这些链接中的每一个都可能如下所示:
<a href="http://yourwebsite.tld/download.cfm?file=#ID#">#DESCRIPTION#</a>当用户单击链接脚本时,它将执行以下操作:
start,显示“下载将立即开始,如果您不想等待,请单击此链接”,链接看起来像download.cfm?file=#ID#&start=yes,再加上您有具有相同URL的meta http-equiv="refresh"。备注:
errorCode包装在单个的try/catch块中,所以你可以在步骤5中有一个地方的redirect.发布于 2012-06-26 08:28:44
如果您的站点有一个404页面,那么您已经将他们定向到了一个错误页面。或者至少你的web服务器是。如果您没有设置站点范围内的404页面,请将其设置为cfm页面,以便为您提供一些额外的功能(日志、警报等)
发布于 2012-06-26 11:46:24
您可以使用FileExists检查是否存在,并在此基础上做出决定:
<cfif NOT FileExists(fileToGetSizeOf)>
<!--- send a 404 --->
<cfelse>
<!--- send the file --->
</cfif>https://stackoverflow.com/questions/11198942
复制相似问题