【问题标题】:Is it possible to store a pdf file in a mysql database?是否可以将pdf文件存储在mysql数据库中?
【发布时间】:2019-07-30 15:04:20
【问题描述】:

我目前正在寻找将 pdf 文件存储在 mysql 数据库中的解决方案。

我尝试将它们存储为 base64 字符串或字节数组,但由于任何原因两者都没有工作。我在 mysql 中使用 longblob 来存储数据。

在插入到mysql之前

byte[] myfile = File.ReadAllBytes(filename);

从mysql中获取

   byte[] buffer = (byte[])cmd.ExecuteScalar(); 
            con.Close();
            FileStream fs = new FileStream(@"test.pdf", FileMode.Create);
            fs.Write(buffer, 0, buffer.Length);

我真的希望有人可以帮助我解决这个问题!

【问题讨论】:

  • but both havn't worked for any reason 这样的评论并不能告诉我们什么。您应该发布不起作用的代码并告诉我们如何它不起作用(异常?错误的结果?,似乎什么都不做?)。贴出的代码还不够——除了读取文件,还有 SQL、列类型等
  • 一般来说,将 pdf 保存在磁盘上并在数据库中保存路径会更容易。同样,您也不必考虑如何将 pdf 正确地流式传输到应用程序以打开和或显示它。
  • 任何二进制类型都可以正常工作。几十年来,我们一直在数据库中存储 blob。至于您的问题,我们需要一个更好的描述然后“不起作用”来帮助您。
  • @RaymondNijland “存储在磁盘上,在数据库中标记”方法有其自身的缺点。并且仅仅添加一个 varbinary 列肯定更难做到。作为中间立场,我们可能有 Filestream:red-gate.com/simple-talk/sql/learn-sql-server/…
  • @Christopher 您的链接是关于 SQL Server (MSSQL) ...MySQL <> SQL Server (MSSQL)..

标签: c# mysql pdf base64


【解决方案1】:

在数据库中存储 BLOBS 有两种思路。第三个尝试将两者结合起来,但我上次检查时不适用于 MySQL。仍然this article on Nr. 3 会让您快速上手。

在数据库中存储很简单:

  1. 将主键、文件名和二进制数据的表添加到数据库。
  2. 在 C# 端提取文件名和二进制数据。
  3. 将文件名和数据存储在数据库中。像往常一样自动生成主键。

用于存储在文件系统中的数据库之外:

  1. 为数据库中的主键、原始文件名和本地路径添加一个表。本地名称可以不同,因为超过 1 个人可能将他们的文件命名为“test.pdf”
  2. 可以选择为二进制文件添加一个哈希值,这样可以避免双重存储。但这是次要的。
  3. 为磁盘上的文档获取一个随机的、未使用的名称。将其和原始文件名存储在数据库中。以及所述磁盘上的二进制数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    • 2020-03-09
    • 1970-01-01
    • 1970-01-01
    • 2019-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多