2

我正在尝试将 PDF 读入 blob 对象,然后插入到我的对象oracle database中,以便可以将其作为附件发送出去。现在电子邮件部分正在工作,它添加了一个附件,但附件总是损坏,我无法打开它。下面是我创建 blob pdf 的代码,有人可以帮我弄清楚为什么这没有创建正确的附件吗?

ls_pdf_name = ls_pdf_path + "\" + "invnum_" + ls_invoice + ".pdf"  
ls_pdf_filename = "invoice_" + ls_invoice +  ".pdf"
ls_rc = wf_check_pdf_status(ll_invoice_number, ls_sub_type, ll_user_supp_id)
If ls_rc = "Y" Then
    li_fnum = FileOpen(ls_pdf_name, StreamMode!)
    li_bytes = FileRead(li_fnum, bPDF)
    FileClose(li_fnum)
    ll_rc = wf_update_pdf_tables(bPDF, ls_pdf_filename, ls_sub_type, ll_user_supp_id, ll_invoice_number, ls_month, ls_year)

编辑

因此,我接受了 Calvin 的建议,并将插入内容更改为以下内容:

这是INSERT将 blob 放入表中的语句

INSERT INTO ATTACH_DOCUMENT
(id, filename, mime_type, date_time_created)
VALUES
(ATTACH_DOCUMENT_SEQ.NEXTVAL, :pdf_filename, 'application/pdf', CURRENT_TIMESTAMP);

UPDATEblob ATTACH_DOCUMENT
SET data = :pdf
WHERE id = ATTACH_DOCUMENT_SEQ.CURRENTVAL;

但是,当我从我的电子邮件中打开 PDF 电子邮件附件时,Adobe 会打开并显示此错误 - 无法打开,因为它不是受支持的文件类型或已损坏(例如,它是作为电子邮件附件发送的,并且未正确解码)

谢谢

4

2 回答 2

2

PDF文件有多大?

您可能无法通过简单的方式获得所有内容FileRead()- 尝试使用FileReadEx()

于 2012-11-29T20:27:12.297 回答
0

首先要做的是检查 pdf 是否正确保存在数据库中:

  • 插入数据库后不要删除pdf文件。
  • 使用 sql 解释器计算插入文件的 blob 列的大小,并验证它是否与文件大小匹配。您没有提及您正在使用的数据库,例如在 ms sql server 中,您可以使用 datalength() 函数来执行此操作。根据数据库,您可以通过计算其 md5 哈希来检查 pdf 是否已损坏。
  • 如果您使用功能强大的查询工具(例如 TOAD for Oracle),您可以将 blob 保存为 pdf 文件并验证其可读性。
于 2012-11-30T14:00:41.050 回答