【发布时间】:2015-05-22 17:23:29
【问题描述】:
此问题已不在标题范围内。我试图找到一种方法来确定从数据库中提取的 PDF 作为字节数组是否是只读的,然后从结果集中删除。我已将 getinfo 转储在只读文件和读/写文件上,并比较了属性,发现没有明显的差异。我一直在谷歌搜索其他方法,但现在我被卡住了。
我正在尝试过滤 PDF 结果集并删除任何受密码保护的内容。我根据结果集的长度将索引循环递减为 1,并将每个 PDF(行)与 IsPDFFile() 函数进行比较。如果比较为假,则不应删除该行。使用removeRows 语句时,<cfif> 似乎被忽略,并且每一行都被不加选择地删除。
<cfloop index="i" from='#getScans.recordcount#' to='1' step="-1" >
<cfset pdfDoc = getScans.ATTACHED_DOCUMENT_FILE[i]>
<cfif NOT IsPDFFile("#pdfDoc#")> <!--- or <cfif NOT IsPDFObject("#pdfDoc#")> --->
<cfSet getScans.removeRows(i -1, 1)>
</cfif>
<cfoutput> #getScans.recordcount# </cfoutput>
</cfloop>
我在网上几乎找不到与我的问题相关的内容。如果有人能提供一些意见,那就太好了!
更新:
我发现IsPDFFile() 总是返回假。它不会将任何输入识别为 pdf。所以我的问题不是我最初认为的那样。在尝试处理从 SQL 服务器返回的 PDF 时,我不断收到 ByteArray 错误。
尝试将 BLOB 与任何 PDF 进行比较时出现的错误是:“ByteArray 对象无法转换为字符串。-从 Application.cfc 调用事件处理程序方法时发生异常。方法名称是:... "
...当我尝试使用 getinfo 时,也会抛出错误:“在 cfpdf 标签中的 GETINFO 操作期间发生错误。错误:com.adobe.internal.pdftoolkit.core.cos.CosNull 无法强制转换到 com.adobe.internal.pdftoolkit.core.cos.CosDictionary 包含或处理的文件的具体顺序是:..."
我想做以下事情:
执行从数据集中删除 PDF 的代码等。
这不起作用。 getinfo 行出错。是我的语法错误,还是我的用法不合适?
【问题讨论】:
-
您确定要针对您删除的每个非 PDF 文件向浏览器发送警报吗?这很快就会变得非常烦人。就像...在第一个之后。
-
当然!警报仅用于调试。我发现 IsPDFFile() 函数在这里也不合适。 pdf 来自 db 作为 ByteArray 数据,比较总是返回 false。我现在尝试使用
-
确保您的问题中的代码与您的故障排除导致您的位置保持同步,并解释您的进度。可能值得搜索“coldfusion storage pdf if db”并阅读需要做什么来将字节数组数据转换为实际的 PDF 二进制文件
-
另外,虽然我们可能从错误的 description 中找出了问题,即“..getting a ByteArray error”,但最好发布 实际的错误消息本身。
-
Stack Overflow uses a Q&A format。因此,与讨论论坛不同,它通常是每个线程一个问题。关于原始问题的观点是有效的。如果您现在面临不同的问题,您应该打开一个单独的线程。请务必解释在这种情况下“只读”是什么意思,因为它是一个通常与物理文件相关联的术语,而不是二进制数据。
标签: sql-server coldfusion coldfusion-9