【问题标题】:Concatenate two binary files into one for download将两个二进制文件合并为一个以供下载
【发布时间】:2014-02-21 18:17:47
【问题描述】:

我有一个 sql server 数据库,它将 txt 文件存储在 varbinary 列中。我有一个 gridview 控制器(C#),它列出了存储的文件。我希望发生的是这样的: 如果从 gridview、应用程序或数据库中选择了两个或多个文件(对我来说无关紧要) 会将所有选定的文件内容连接到一个用户可以下载的文件中。

所以如果文件一是一个包含单词“Hello”的文本文件,而文件二是一个包含单词“world”的文本文件,应用程序将从这两个文件中读取内容并创建一个包含“Hello”的新测试文件世界”

欢迎所有建议。

【问题讨论】:

  • 我想您是在问如何从数据库中读取数据,然后将其全部合并到一个文件中。如果这是正确的,您可以在 Google 上搜索其中的大部分内容,然后回来向我们询问有关您的实施的具体问题。
  • 这只是一个要求。你试过的代码在哪里?
  • 我不知道该尝试什么。这不是数据库中的文本。这些是二进制文件。所以需要打开文件,需要从中读取数据,然后将数据合并到一个文件中。这是一个遗留系统,这是一个我不知道如何处理的新要求。如果由我决定,我会从一开始就存储文件文本

标签: c# sql-server concat varbinary


【解决方案1】:

实现此目的的一种方法是让查询为您连接数据并从中创建文件。

比如,

从 A_Table 中选择 convert(varchar(1024), varbinaryA) + convert(varchar(1024), varbinaryB)

【讨论】:

    【解决方案2】:

    您的主题阅读“两个 binary 文件”,但您给出的示例是“两个 text 文件”。这是两个完全不同的东西。连接文本文件简单明了。你可以使用类似的东西:

    string firstFile = System.IO.File.ReadAllText("myfile1.txt");
    string secondFile = System.IO.File.ReadAllText("myfile2.txt");
    

    然后将拼接结果firstFile + " " + secondFile返回给用户。

    但是,对于二进制文件,如果将它们连接起来,它们将不再起作用。例如,firstFile.exe 和 secondFile.dll 的串联对任何事情都没有用处。如果您想为您的用户提供二进制文件的单一下载,我建议将它们添加到一个压缩文件(例如 Zip 文件)并提供该文件作为下载。然后,您的用户可以提取文件并使用它们。

    【讨论】:

    • 我认为这会奏效。我明天测试一下。文本文件和二进制文件之间的混淆是:文件作为文本文件存在于用户计算机上,然后当他们上传时,它被转换为 varbinary。因为它存储在数据库中,所以它不是文本文件。它不存储在服务器文件系统上。因此,数据需要从二进制转换回文本,然后连接起来。并且需要下载连接的文件,而不是单个文件。
    • 在这种情况下,您必须将 varbinary 字段读入内存流,并根据您的需要,a) 使用流写入一个新的单个文本文件并在响应中返回它;或 b) 使用流在一个 zip 文件中创建文本文件并在响应中返回。当然,您始终可以从 varbinary 在服务器上创建临时文件,然后像我提到的那样使用 System.IO.File 读取它们,但在您的情况下使用内存流效率更高。
    猜你喜欢
    • 2020-09-14
    • 2019-06-27
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多