我对ColdFusion相当陌生。我有下面的代码,它显示在我可以正常工作的教程中引用的页面上的图像。从网站下载图片使用Coldfusion
当用户选择任何图像时,它将在浏览器中显示图像。但是,我想让用户下载图像,而不是在浏览器中显示它们。
我无法使用HTML5 下载来实现我正在做的事情,因为我正在使用的网站在XHTML 1.0上运行。
我发现了以下方法File Downloads with ColdFusion但我不理解如何应用它。如果任何人都可以引导我走向正确的方向,或向我展示另一种方法,我将不胜感激。
谢谢您提前。
<cfset filters = "*.pdf|*.zip|*.doc*|*.docx*|.ppt*|*.pps*|*.pot*|*.dot*|*.xls*|*.xlsx*|*.swf|*.rtf|*.png|*.bmp|*.jpeg|*.gif">
<cfdirectory
directory="c:\Downloads\Logos"
name="myDirectory"
action = "list"
filter="#filters#"
sort="name ASC, size DESC"
>
<table width="80%" border="0" align="left">
<cfoutput query="myDirectory">
<cfset FileExt=ListLast(Name,".")>
<cfif FileExt eq 'pdf'>
<cfset imgicon = 'pdf-icon-24.png'>
<cfelseif FileExt eq 'xlsx' or FileExt eq 'xls'>
<cfset imgicon = 'Microsoft-Excel-icon-24.png'>
<cfelseif FileExt eq 'docx' or FileExt eq 'doc'>
<cfset imgicon = 'docx-icon-24.png'>
<cfelseif FileExt eq 'lnk'>
<cfset imgicon = 'url-icon-24.png'>
<cfelseif FileExt eq 'png'>
<cfset imgicon = 'png-icon.png'>
<cfelse>
<cfset imgicon = 'Documents-icon-24.png'>
</cfif>
<tr>
<td width="30"> </td>
<td class="e"><img src="images/#imgicon#" alt="#Name#" class="float-left"/ ></td>
<td class="e"> <a href="ForceDownload.cfm?filename=#EncodeForURL(Name)#">#Name#</a></td>
</tr>
</cfoutput>
</table>
</p>
<br /><br /><br /><br /><br /> <br /><br /><br /><br /><br /> <br /><br /><br /><br /><br /> <br /><br /><br /><br /><br /> <br /><br /><br /><br /><br /> <br /><br /><br /><br /><br /> <br /><br /><br /><br /><br /> <br /><br /><br /><br /><br />
<p class="post-footer align-left">
<span class="date">
<cfoutput>#dateformat(Now(),"mmm dd,yyyy")#</cfoutput>
</span>
</p>
<br />
<br />
</div>
更新我创造了另一个脚本,并把它称为ForceDownload.cfm,也做了以下内容:
<cfset folder = "c:\path\Downloads\Logos\">
<cfif StructKeyExists(url,"filename") && fileExists(folder & filename)>
<cfset filename = href="ForceDownload.cfm?filename=#Name#">
<cfset fileInfo = GetFileInfo(folder & filename)>
<cfset mimeType = getPageContext().getServletContext().getMimeType(folder & filename)>
<cfheader name="Content-Disposition" value="attachment; filename=""#filename#""">
<cfheader name="Expires" value="#Now()#">
<cfheader name="Content-Length" value="#fileInfo.size#">
<cfcontent type="#mimeType#" file="#folder##filename#" deletefile="No">
</cfif>
我更换了以下标签<a href="Logos\#Name#" >#Name#</a>
具有以下标签<a href="ForceDownload.cfm">#Name#</a>
当我这样做,没有错误。但是,当我点击任何图像时,它会进入不显示图像的空白页面。
我不知道如何传递文件的名称为filename
任何帮助,将不胜感激。
更新的错误:
我更新的超级链接:<a href="ForceDownload.cfm:filename=#Name#">#Name#</a></td>
,我做了以下内容:*
<cfparam name="http://portal/regalnet_test/ForceDownload.cfm?filename=#Name#" default="">
<cfset folder = "\\oc2-web\wwwroot\RegalNet_Test\Downloads\MktgDownloads\Logos\">
<!--- If the path to the file is valid --->
<cfif fileExists(folder & filename)>
<cfset filename = name>
<cfset fileInfo = GetFileInfo(folder & filename)>
<cfset mimeType = getPageContext().getServletContext().getMimeType(folder & filename)>
<cfheader name="Content-Disposition" value="attachment; filename=""#filename#""">
<cfheader name="Expires" value="#Now()#">
<cfheader name="Content-Length" value="#fileInfo.size#">
<cfcontent type="#mimeType#" file="#folder##filename#" deletefile="No">
<!--- Otherwise, display debugging information (Dev only) --->
<cfelse>
<cfoutput>
Sorry, unable to find file: #folder##filename#<br>
Does the folder exist? #directoryExists(folder)#<br>
Does the File Exist? = #fileExists(folder & filename)#
</cfoutput>
</cfif>
您需要额外的.cfm脚本来处理下载。该新脚本将包含来自博客条目的代码(请务必更新文件夹路径)。然后创建一个指向新脚本的超链接,并将该图像文件名称作为名为“文件名”的URL参数传递。 – Leigh
@Leigh你能告诉我吗?再一次,我对此很新颖。 –
先试一试:) 1.将该确切代码复制到新的.cfm文件中。 2.将文本“[文件路径下载]”更改为真正的文件路径,如“c:\ path \ yourimages \”3.现在,在浏览器中通过传递真实图像的文件名来测试该脚本目录作为名为'filename'的URL参数。例如'http://yoursite/yourNewPage.cfm?filename = someImageFileThatExists.png'。结果是什么? – Leigh