我有一个表将用户FileData
存储为数据类型:varbinary(MAX) FILESTREAM null
在我的网络应用程序中,用户选择多个文件ID并最终想要一个选定FileId
s
目前我的解决方案是将FileData
引入C#并调用一些C#函数/库来压缩文件并将其返回给用户。这样做的问题是用户可能会选择大量文件,导致C#中存在大量临时数据。
有没有办法可以在SQL Server中压缩这些文件,然后将压缩后的结果返回给C#,而不必将选定的FileData
带入C#内存?
答案 0 :(得分:3)
您当然可以通过存储过程来执行此操作,该存储过程将写入文件和zip,但您将编写将文件写入磁盘并执行Windows系统命令的SQL。您可以阅读xp_cmdshell。我个人会反对这个建议
您仍然会在该模型中将大型zip文件blob返回到您的服务器。您的用户无法使您的系统过载吗?你可以使用流媒体解决这个问题,这可以通过你的压缩来完成。
您使用的是最新的ZipArchive吗?如果使用得当,它可以提供流入和流出。 See here示例写入而不会碰到内存基本上,您将编写代码以使用输出流,以便数据不会在内存中累积...new ZipArchive(myOutPutStream, ZipArchiveMode.Update, true or false)