我正在使用ColdFusion 10的新REST API。在其中一个端点,我正在返回一个这样的文件:
<cffunction name="getFil"
access="remote"
httpmethod="GET"
restpath="{id}/fil"
returntype="void">
<cfargument name="id" required="true" restargsource="path" type="numeric" />
<cfprocessingdirective suppresswhitespace="no">
<cfheader name="Content-Disposition" value="attachment; filename=foo.pdf" />
<cfheader name="Content-Type" value="application/pdf">
<cfcontent file="C:/some_path_to_file/foo.pdf" deletefile="no" />
</cfprocessingdirective>
</cffunction>
它工作正常并且响应200 OK,然后响应正文中的文件。即使响应正常,也会调用站点范围的错误处理程序,错误消息如下所示:
[coldfusion.runtime.AbortException : null] null <br>The error occurred on line 124.
客户端永远不会看到错误,但是当调用站点范围的错误处理程序时,我的电子邮件服务会向开发人员发送通知电子邮件。任何人都知道这个AbortException是什么以及如何防止它?
答案 0 :(得分:1)
我怀疑这种情况是停止处理的一些CFML标签(在这种情况下像<cfcontent>
)似乎使用<cfabort>
代码来执行此操作。我现在无法记住如何重新编写它,但是<cfabort>
确实引发了一个异常(并且{和AbortException
听起来正确),但ColdFusion在很大程度上抑制了它。 REST请求不使用与普通CF请求相同的servlet,所以它可能不太适合抑制它?
如果您(暂时用于测试目的)删除<cfcontent>
,我预计不会发生异常。
我觉得我对这里的一些细节有点模糊,但我现在无法对它进行彻底的测试。对于那个很抱歉。当我找时间的时候,我会试着坚定起来并且听起来更明确。
答案 1 :(得分:1)
我无法与亚当的答案争辩,因为它似乎有道理。也许只是抓住那个特定错误(如果可以)并抑制电子邮件就足够了。但我做了一些搜索,可能会找到一种你可以尝试的不同方法。不使用<cfheader>
和<cfcontent>
标记,只需从服务中返回PDF的实际二进制数据。请参阅此博客文章:
CF html to pdf service - consume from node.js using rest api
不要担心node.js引用,因为给定的示例不使用它。他们只是链接到node.js示例。
在他们的示例中,他们将数据传递给服务,但是您应该轻而易举地阅读PDF文件并返回该数据。