我的应用程序中要求用户可以将文件上传到数据库。此时,用户上传文件,网页将其保存在临时目录中,其次逻辑将文件加载到Byte []中,并将此数组作为参数传递给“insert”SQL语句。
该方法的问题在于,如果用户尝试上传1GB文件,则会导致服务器需要1GB内存才能将该文件存储为Byte [],并且该内存应该在以后进行GCollected 。如果多个用户同时执行此操作,则服务器可能会崩溃。
避免这种情况的一种方法是限制文件的大小......但客户不希望这样做。所以最好的方法似乎是使用指针顺序将文件上传到数据库。我已经为SQL Server using a special function named updatetext找到了一个这样的例子,但是我想知道一种对所有类型的数据库都有效的方法,即。知道是否可行以及如何将文件以块的形式上传到数据库。
干杯。
答案 0 :(得分:0)
我不相信这样的事情是可能的。
更好的选择可能只是将文件存储在数据库服务器上的路径中,并仅存储数据库中该文件的路径。这将消除将文件加载到内存中的需要。您可以使用FTP或只是将文件复制到数据库服务器,具体取决于网络配置。
答案 1 :(得分:0)
正如其他人所指出的那样,我也相信在文件系统上存储文件是更好的选择。请注意,您可以使用可配置的共享文件夹(或文件服务器),以便轻松移动应用程序。
无论如何,如果必须以块的形式将大型二进制数据写入数据库,那么数据库之间的方式会有所不同。您需要在该数据库的ADO.NET数据提供程序中检查此类支持。这是article解释如何阅读&为Sql Server和Oracle编写大块数据。由于数据库或托管提供程序的方式会发生变化,因此您必须根据接口抽象API(作为某些接口)和代码。然后创建数据库特定的实现并使用工厂或IOC等来选择实现。