【问题标题】:Store a PDF file in MySQL在 MySQL 中存储 PDF 文件
【发布时间】:2010-11-02 07:03:30
【问题描述】:

如何在 MySQL 的字段中存储 PDF 文档?

目前,我有一个客户列表,每个客户都有一份证书,其中包含有关其帐户的信息,他们可以将其提供给其他公司以证明他们是我们的客户。目前,他们的证书以 PDF 格式导出并通过电子邮件发送给工作人员(客户也获得了物理副本),并且该人的邮箱充满了这些电子邮件。我更愿意将其保存在客户的记录中 - 允许通过我们内部 CRM 中的客户文件访问它。

我考虑将 PDF 放在一个文件夹中,并将它们的位置作为 varchar 存储在客户的记录中,但如果 PDF 被移动/删除/等。然后我们就上了一条小溪。

我的理解是 BLOBMEDIUMBLOB 是我用来存储它的字段类型,但我在这方面有点无知。我不知道如何在字段中存储类似的东西(给它什么 C# 数据类型),然后如何获取它并通过 PDF 阅读器打开它。

【问题讨论】:

  • 为什么 PDF 容易被删除/移动?
  • 运气好吗?如果您有任何问题,请随时提出。
  • @dcaunt:接待处有权访问他们在服务器上的共享文件夹,并且无法更改。接待处也有处理事物的诀窍。

标签: c# mysql pdf blob


【解决方案1】:

我考虑将 PDF 放入 文件夹并将其位置存储为 varchar 在客户的记录中,但是 如果 PDF 被移动/删除/等。 然后我们就上了一条小溪。

这就是我要采取的方法。然后使用一些逻辑可能是一些 BPEL 类型的东西 - 检测是否有任何文件移动/删除并触发您的数据库的触发器以正确更新位置/删除位置

【讨论】:

    【解决方案2】:

    老实说,我认为使用链接而不是将文件实际插入数据库是最好的方法。这样做会使数据库变得非常慢,而且麻烦多于其价值。

    我会将文件上传到指定文件夹,如“证书”,并让证书名称与客户编号一起使用,以便于查找和编辑、删除等。我见过人们将图像存储在数据库中,但即便如此建议不要。

    如果您希望的方法绝对是必须的,请查看这篇文章:

    http://www.wellho.net/mouth/1001_-pdf-files-upload-via-PHP-store-in-MySQL-retrieve.html

    它解释了如何在 mySQL 数据库中存储和检索 .pdf 文件。

    祝你好运!

    【讨论】:

    • 未优化确实如此,从数据库提供 PDF 通常比仅存储路径和从磁盘提供服务要慢。
    • +1 将其存储在文件系统中并在 db 中存储对它的引用可能要容易得多,但是数据完整性很差,而且备份出错的可能性更大。 : 我看了那篇文章,里面有一些好东西。我只需要弄清楚如何让我的 ORM 也按照我需要的方式工作。
    • 我想说它也依赖于基础设施和实现。哦,有时最快的并不总是最好的。
    【解决方案3】:

    http://www.phpriot.com/articles/images-in-mysql 是一个很好的教程,有一些背景信息,以及在 MySQL 中存储图像的实现

    【讨论】:

      【解决方案4】:

      将其放入数据库中,但 BLOB 数据类型可能不会删除它。 MEDIUMBLOB 通常就足够了。

      MySQL Datatypes

      BLOB, TEXT                L + 2 bytes, where L < 216
      MEDIUMBLOB, MEDIUMTEXT    L + 3 bytes, where L < 224
      LONGBLOB, LONGTEXT        L + 4 bytes, where L < 232
      

      我已经使用了几次,效果非常好。一定要保存文件大小,因为这样更容易检索它。不确定它是否适用于 C#,就像它适用于 PHP。

      如果使用带参数的预处理语句,数据将自动转义 AFAIK。

      我也看不出数据库本身在存储此类数据时会变慢的真正原因。主要的瓶颈当然是数据的传输。此外,MySQL 有时会限制查询的最大长度,尤其是响应。

      一旦运行起来,它就会非常简洁,尤其是在处理大量小文件时。对于少量的大文件,这种做法没有意义,最好使用一些备份系统来处理移动/删除的文件。

      【讨论】:

      • 这实际上是我最终做的。它现在已经生产了几个月,并且运行良好。我确实必须增加 mysql 的数据包大小,否则一旦从转储中恢复到该表,它们就会崩溃。我不必存储文件长度,我只需使用临时文件名将字节转储到 Windows 临时文件夹并打开文件。
      • 是的,文件大小用于直接通过 HTTP 提供服务,我无法从内存中的数据中获取正确的大小。
      猜你喜欢
      • 2011-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多