我有一个JS / HTML5前端调用C#WebAPI来上传需要加密然后存储在SQL DB中的大文件(1-3GB)。
我的限制是我无法存储未被文件的文件,并且无法存储在SQL之外。我也不能使用SQL FileStream。
对于WebAPI,我禁用了BufferStream(通过覆盖WebHostBufferPolicySelector)来处理任何内存异常。这允许我直接将文件上载到磁盘,而不会显着增加内存占用。
我想在SQL表中按行顺序存储构成文件的一系列加密块。然后我可以拉出块,解密它们,并在请求时将它们流回用户。
我不知道如何获取多数据部分消息,加密块并将其写入数据库中的行。有人能指出我正确的方向,我怎么能这样做?
答案 0 :(得分:0)
行。所以你已经解决了WebAPI没有用完RAM的问题。但下一个问题是你必须将数据传递给SQL Server。您可以通过任何.NET流加密器管理请求流,但之后它必须到达某处。
我建议你这样做:
请求流 - >加密器 - >自定义流
自定义流将负责将数据发送到块中的sql server。您可以微调块的大小,但实质上是这样您不会尝试发送1GB或更大参数大小的sql命令。在给定固定缓冲区大小的情况下,您的自定义流sql命令将打破上传到字节块。当缓冲区超过一定量时,您向SQL Server写入一行,刷新缓冲区,并等待更多来自加密器流。写入的行将与某种ID绑定在一起,当然还有一个序列号,它将告诉您重新组装它们时使用的顺序。
当您想要发回数据时,您只需再次执行此操作,但反之亦然。