繁体   English   中英

将大文件转换为byte []以存储在SQL Server(C#)中

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

我有一个大小约为1.6 GB的文件。 我知道在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();

它在扔

mscorlib.dll中发生类型'System.OutOfMemoryException'的异常,但未在用户代码中处理

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

您不应该这样做,或者使用块读取文件,或者如果您想将其上传到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);

基本上,您不能这样做,而不是使用字节数组。

如果满足以下条件,则可以对大于2GB的对象执行此操作:

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

2)正在运行.NET Framework V4.5或更高版本。

3)在app.config中设置了gcAllowVeryLargeObjects: gcAllowVeryLargeObjects元素

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

您可以使用流(允许约8TB)执行此操作,但不能使用数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM