【问题标题】:Using binary data as a source in Railo's cfpdf tag在 Railo 的 cfpdf 标签中使用二进制数据作为源
【发布时间】:2014-10-10 17:08:07
【问题描述】:

所以我将 PDF blob 保存在数据库中并尝试检索它并将其显示在页面上。当我在 Coldfusion 10 上运行代码时,它按预期运行。但是,当我将相同的确切代码移至 Railo 4.2.1.0 时,出现错误。

我很好奇是否可以将二进制数据传递到 Railo 中的 CFPDF Source 标签。如果没有,有人知道一个好的解决方法吗?

当我运行转储时,pdfBinary 数据中确实包含正确的二进制信息。

谢谢

代码:

<cfset tcpInformation = dataPopulatorController.getTCPInformation(session.requestID, session.personID) />

<cfset pdfBinary = tcpInformation.file_content[1]>

<cfpdf action="read" source="pdfBinary" name="TCPDocument">

<cfheader name="Content-Disposition" value="filename=TCP.pdf" />
<cfcontent type="application/pdf" variable="#toBinary(TCPDocument)#" />

我在 Railo 上遇到的错误:

发生的错误 /****/tcpviewer.cfm:第 7 行 5: 6: 7: 8: 9:

Java Stacktrace 文件或目录 pdfBinary 不存在 在 railo.commons.io.res.util.ResourceUtil.toResourceExisting(ResourceUtil.java:199):199 在 railo.commons.io.res.util.ResourceUtil.toResourceExisting(ResourceUtil.java:164):164 在 railo.runtime.tag.PDF.toPDFDocument(PDF.java:1207):1207 在 railo.runtime.tag.PDF.doActionRead(PDF.java:1033):1033 在 railo.runtime.tag.PDF.doEndTag(PDF.java:568):568 在 onboarding.views.tcpviewer_cfm$cf.call(/onboarding/views/tcpviewer.cfm:7):7 在 railo.runtime.PageContextImpl.doInclude(PageContextImpl.java:913):913 在 railo.runtime.PageContextImpl.doInclude(PageContextImpl.java:865):865 在 railo.runtime.listener.ModernAppListener._onRequest(ModernAppListener.java:206):206 在 railo.runtime.listener.MixedAppListener.onRequest(MixedAppListener.java:18):18 在 railo.runtime.PageContextImpl.execute(PageContextImpl.java:2218):2218 在 railo.runtime.PageContextImpl.execute(PageContextImpl.java:2185):2185 在 railo.runtime.engine.CFMLEngineImpl.serviceCFML(CFMLEngineImpl.java:332):332 在 railo.loader.servlet.CFMLServlet.service(CFMLServlet.java:29):29 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:728):728 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305):305 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210):210 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222):222 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123):123 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472):472 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171):171 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99):99 在 org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:947):947 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118):118 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408):408 在 org.apache.coyote.ajp.AjpProcessor.process(AjpProcessor.java:200):200 在 org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589):589 在 org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310):310 在 java.util.concurrent.ThreadPoolExecutor.runWorker(未知来源):-1 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(未知来源):-1 在 java.lang.Thread.run(Unknown Source):-1

【问题讨论】:

  • cfpdf action="read" 的目的是什么?你应该可以直接使用二进制文件&lt;cfcontent type="application/pdf" variable="#pdfBinary#" /&gt;

标签: coldfusion railo cfpdf


【解决方案1】:

从 Railo 中的二进制变量源读取时,您似乎需要用#s 包装它:

<cfpdf action="read" source="#pdfBinary#" name="TCPDocument">

但正如 Leigh 所说,无需使用 CFPDF 重新读取变量即可将内容输出到浏览器:

<cfset tcpInformation = dataPopulatorController.getTCPInformation(session.requestID, session.personID) />
<cfset pdfBinary = tcpInformation.file_content[1]>
<cfheader name="Content-Disposition" value="filename=TCP.pdf" />
<cfcontent type="application/pdf" variable="#pdfBinary#" />

【讨论】:

    猜你喜欢
    • 2012-05-28
    • 2015-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-04
    • 2014-06-05
    相关资源
    最近更新 更多