【问题标题】:COLDFUSION How do I store text file into session? FileNotFoundExceptionCOLDFUSION 如何将文本文件存储到会话中? FileNotFoundException
【发布时间】:2014-12-18 02:58:53
【问题描述】:

我还是 ColdFusion 的新手,在将 cffile 上传到会话和从另一个页面读取时遇到了一些问题。基本上,我的主要目标是将文本文档正确上传到会话,最后,将其显示在另一个 cfm 页面上。

Form.cfm:

<cfif not structKeyExists(session.checkout, "input")>
    <cfset session.checkout.input = {textname="", textemail="", docattach=""}>
</cfif>

<cfparam name="form.textname" default="#session.checkout.input.textname#">
<cfparam name="form.textemail" default="#session.checkout.input.textemail#">
<cfparam name="form.docattach" default="#session.checkout.input.docattach#">

<cfif structKeyExists(form, "Submit")>
    <cfset form.textname = trim(htmlEditFormat(form.textname))>
    <cfset form.textemail = trim(htmlEditFormat(form.textemail))>
    <cffile action="upload" fileField="docattach" destination="#session.checkout.input.docattach#" nameConflict="overwrite">
    <cfset session.checkout.input = {textname=form.textname, textemail=form.textemail, docattach=<--How do I store cffile upload result here?-->}>

    <cflocation url="formcomplete.cfm" addToken="false">
</cfif>

<!DOCTYPE html>
<html>
<head>

FormComplete.cfm

<cfif not structKeyExists(session, "checkout")>
    <cflocation url="form.cfm" addToken="false">
</cfif>

<cffile action="read" file="#session.checkout.input.docattach#" variable="attachment">

<!DOCTYPE html>
<html>
<head>
    ...
</head>
<body>
    <cfoutput>
        Name: #session.checkout.input.textname#</br>
        Email: #session.checkout.input.textemail#</br>
        Business Rationale: #attachment#    </br>
    </cfoutput>
</body>
</html>

那么我该如何将它放入会话中呢?另一个问题是显示图像或文档的结果。我可以使用哪些命令?

【问题讨论】:

  • 为什么你认为你需要把它放到会话范围内?
  • @DanBracuk 那么您有什么替代方法可以推荐吗?例子?
  • 我建议简单。而且,一步一个脚印。将您的表单提交到首先上传文件的页面。你用它做什么取决于它的类型,但假设它是一个图像。您可以使用 html 锚标记来显示它。如果是另一种文件类型,您可能需要查看 cfheader 和 cfcontent 标签。
  • @DanBracuk 我可能听起来很愚蠢。但是..我要上传到哪里?本地目录?
  • 这个问题可以通过实际包含您收到的完整异常/堆栈跟踪来改进。

标签: file session exception coldfusion


【解决方案1】:

目标必须是服务器硬盘驱动器(或 RAM 驱动器)上的实际文件路径。看来 session.checkout.input.docattach 的值当前是空字符串而不是路径。上传文件后,将有一个 cffile 变量,其中包含有关新上传文件的路径的信息,然后您可以使用 fileRead() 读取它并将内容放入您自行决定的变量中。

查看文档以了解 cfile action=upload https://wikidocs.adobe.com/wiki/pages/viewpage.action?pageId=87505342

另外,请勿将文件上传到可通过网络访问的目录,因为这可能会造成安全漏洞。

【讨论】:

  • 如果我只对所有目的地使用 GetTempDirectory() 会更好吗?
  • 那将是一个很好的解决方案。事实上,我相信文档说默认使用 CF 临时目录,因此您只需要从 cffile 结构中获取文件名,然后通过 getTempDirectory() 加上上传的文件名来构建路径。另外,我应该在前面提到这一点,但请确保您可以信任文件的内容或将其转义为 HTML,因为您在页面中输出它并且它可能包含恶意内容,就像 JavaScript 漏洞或 XSS 攻击一样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-13
  • 1970-01-01
  • 1970-01-01
  • 2012-07-24
相关资源
最近更新 更多