将 byte[] 中的大文件转换为存储在 SQL 服务器中 (C#)

Convert large files in byte[] to store in SQL Server (C#)

我有一个大小约为 1.6 GB 的文件。我知道 storing large file in SQL Server。但是我需要为这个大文件生成 blob。

我正在使用以下代码为大文件生成 byte[]

string filePath = Server.MapPath(filename);
string filename = Path.GetFileName(filePath);

FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs);

Byte[] bytes = br.ReadBytes((int)fs.Length);

br.Close();
fs.Close();

正在投掷

An exception of type 'System.OutOfMemoryException' occurred in mscorlib.dll but was not handled in user code

我想知道如何将这个大文件转换为 byte[]

基本上,不能使用字节数组。

您可以为大于 2GB 的对象执行此操作,如果您是:

1) 运行 在 64 位系统上以 64 位模式运行。 32 位应用程序无法寻址大于 1.5GB 的内存。

2) 运行 .NET Framework V4.5 或更高版本。 并且

3) 在您的 app.config 中设置了 gcAllowVeryLargeObjects:gcAllowVeryLargeObjects Element

但是...数组索引器仍然限于整数 - 因此您不能对字节数组执行此操作,因为您的数组索引太大了。

您可以使用流(允许约 8TB)但不能使用数组。

你不应该这样做,要么使用块读取文件,要么在你想将它上传到 SharePoint 的情况下,只需将两个流连接在一起,SharePoint 库将完成剩下的工作,例如:

FileStream fileStream = File.OpenRead(filename);
SPFile spfile = theLibrary.Files.Add(fileName, fileStream, true);

这是在 SharePoint 服务器端对象模型中完成的,同样可以用 CSOM 完成

     Microsoft.SharePoint.Client.File.SaveBinaryDirect(clientContext, fileUrl, fileStream, true);