【发布时间】:2021-04-15 13:00:53
【问题描述】:
我正在创建一个网络应用程序。为此,我使用 Microsoft SQL Server 2016 (SP1-GDR) (KB4505219) - 13.0.4259.0 (X64) 和 ASP.NET MVC 5。
在我的数据库中,我有一个包含 PDF 文件的表格。我已将文件内容作为 blob 存储在该表中。我还将文件名存储在该表中。
现在我想让我的客户能够下载多个 PDF 文件。 PDF 文件应该被连接起来。因此,如果客户请求所有 PDF 文件,他或她应该将所有 PDF 文件连接到一个 PDF 文件中。
我想到了两种连接 PDF 文件的方法。
- 首先是在 SQL Server 查询中连接 PDF 文件。因此,当我从数据库中获取 blob 时,它已经被连接起来,我不必在 C# 代码中做任何进一步的事情。
- 二是从数据库中获取所有的blob,并在C#中连接这些blob。
我尝试使用 SQL Server 中的 COALESCE 函数来连接 SQL Server 中的 blob。
DECLARE @blobcontent varbinary(max);
SELECT
@blobcontent = COALESCE(@blobcontent, 0x0) + FileTable.fileContent
FROM
FileTable;
SELECT @blobcontent;
这对我不起作用。
因此,在从数据库中获取所有 blob 后,我尝试在 C# 中连接 blob。我尝试创建一个新的字节数组变量并将所有 blob 放在新的字节数组中。
...
var file1 = GetFileById(1); /*the function GetFileById(int id) returns a tuple (byte[], string) with the file-content as the first Element and the file-name as the second element*/
var file2 = GetFileById(2);
var concatenatedFile = file1.Item1.Concat(file2.Item1).ToArray();
...
这对我也不起作用。
有解决这个问题的聪明方法吗?
【问题讨论】:
-
这两种方式都行不通,因为两个文件的连接不会生成一个文件(它会被损坏)。您只需在应用服务器上执行此操作,只需使用一些库(如 itextsharp 或 aspose)创建一个全新的文件,或者您可以创建一个包含所有文件的单个 zip 文件。
-
不,它没有@Achtung,因为我没有使用 iTextSharp
-
@PSK 这就是我的想法......你已经证实了我的怀疑。谢谢。
-
这是一种可以使用的工具。如果您不想使用那个选择另一个。但是你需要一个工具。
标签: c# asp.net sql-server asp.net-mvc