几个G的大文件转换成二进制后需保存在SQL Server的table中,太大传不了,如何分段上传

CapAvenger 2015-01-29 11:48:40
几个G的大文件转换成二进制后需保存在SQL Server的table中,太大传不了,如何分段上传
下面是代码
     
FileInfo fi = new FileInfo(FilePath);

FileName = fi.Name;
byte[] bData = null;
// Read file data into buffer
using (FileStream fs = fi.OpenRead())
{
bData = new byte[fi.Length];//到这一步就报错:Arithmetic operation resulted in an overflow.
int nReadLength = fs.Read(bData, 0, (int)(fi.Length));


知道是文件太大的缘故,怎么分段传,因为保存在table中之后还要还原成文件的
...全文
322 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
CapAvenger 2015-08-10
  • 打赏
  • 举报
回复
谢谢各位集思广益,我再想想
activexme 2015-02-02
  • 打赏
  • 举报
回复
引用 楼主 z1992x 的回复:
几个G的大文件转换成二进制后需保存在SQL Server的table中,太大传不了,如何分段上传 下面是代码
     
            FileInfo fi = new FileInfo(FilePath);

            FileName = fi.Name;
            byte[] bData = null;
            // Read file data into buffer
            using (FileStream fs = fi.OpenRead())
            {
                bData = new byte[fi.Length];//到这一步就报错:Arithmetic operation resulted in an overflow.
                int nReadLength = fs.Read(bData, 0, (int)(fi.Length));
知道是文件太大的缘故,怎么分段传,因为保存在table中之后还要还原成文件的
你是C/S系统还是B/S系统?B/S系统的话,你可以将文件存在服务器中,然后将文件路径信息保存在数据库中。这样用户同样可以在数据库中搜索。而且处理起来也比较简单。
格拉 2015-02-02
  • 打赏
  • 举报
回复
引用 12 楼 z1992x 的回复:
[quote=引用 6 楼 clxcxx 的回复:] 然后取出来的时候再合并?没事吧?
这个是给用户提供的工具,用户又没有权限直接把文档copy到服务器,不知道那些云存储是怎么转化的[/quote]云存储也是文件服务器,不可能给你存到数据库中的
於黾 2015-01-30
  • 打赏
  • 举报
回复
引用 12 楼 z1992x 的回复:
[quote=引用 6 楼 clxcxx 的回复:] 然后取出来的时候再合并?没事吧?
这个是给用户提供的工具,用户又没有权限直接把文档copy到服务器,不知道那些云存储是怎么转化的[/quote] 开个FTP啊 不是什么问题都要数据库来解决的
CapAvenger 2015-01-30
  • 打赏
  • 举报
回复
引用 9 楼 sp1234 的回复:
如果你有大量文件,不妨考虑 mongodb 等最近几年出现的数据库系统。因为这些更适用于现在出现的大数据需求。 比如说,假设你有多个数据库服务器,mongodb数据库会在保存二进制文件时,自动处理数据的分片和复制操作。这样你就可以水平扩展你的数据库服务器,不会因为有1000个几G大文件而感到尴尬。
公司就是用SQL Server~~
CapAvenger 2015-01-30
  • 打赏
  • 举报
回复
引用 6 楼 clxcxx 的回复:
然后取出来的时候再合并?没事吧?
这个是给用户提供的工具,用户又没有权限直接把文档copy到服务器,不知道那些云存储是怎么转化的
CapAvenger 2015-01-30
  • 打赏
  • 举报
回复
分段上传还是很大,在table中,哎
於黾 2015-01-29
  • 打赏
  • 举报
回复
主从表的话, 主表结构: 主键(Id) 文件信息 从表结构: 主键(ID) 外键(主表ID) 分段信息(顺序) 二进制文件片段
於黾 2015-01-29
  • 打赏
  • 举报
回复
上传到服务器文件夹里,数据库里存个路径不就得了 那么大文件要放到数据库的一个字段里,有点扯淡了吧 你要非这么干,那就只能主从表了,每一行存一部分.到时候都读出来自己拼接.
  • 打赏
  • 举报
回复
类似 SQL Server 这样的传统的关系型数据库,以前以为世界上的大文件不会放到数据库中统一管理、统一携带、统一备份、统一索引等等,所以数据库系统通常没有直接的二进制流处理功能。所谓 blob 字段的读写,通常不支持“分段”处理功能。 但是现在,文件功能已经被内置到数据库系统中了。例如上面的 msdn 上就有许多例子,对保存在 SQL Server 系统中的文件进行读写。如今在数据库系统中保存文件,供成千上万客户端远程(随机分块)读写,同时使用普通的sql语句也可以对文件进行查询管理(例如根据文件名查询、根据文件的md5查询,等等),这也是一个潮流。
  • 打赏
  • 举报
回复
如果你有大量文件,不妨考虑 mongodb 等最近几年出现的数据库系统。因为这些更适用于现在出现的大数据需求。 比如说,假设你有多个数据库服务器,mongodb数据库会在保存二进制文件时,自动处理数据的分片和复制操作。这样你就可以水平扩展你的数据库服务器,不会因为有1000个几G大文件而感到尴尬。
E次奥 2015-01-29
  • 打赏
  • 举报
回复
数据库存路径,文件存到服务器文件夹
  • 打赏
  • 举报
回复
SQL Server支持随机位置读写 blob 数据: http://www.cnblogs.com/shanyou/archive/2013/06/11/3132212.html 当然博客园上大部分内容是照抄别人的,你也可以查看原文:https://msdn.microsoft.com/zh-cn/library/gg471497(v=sql.110).aspx 关键是,当 blob 很大时,你就需要以随机数据块方式去读写了。那种把整个 blob 字段内容读取出来的方法,根本不可取。
格拉 2015-01-29
  • 打赏
  • 举报
回复
然后取出来的时候再合并?没事吧?
zixingcheng_ 2015-01-29
  • 打赏
  • 举报
回复
还是存文件实在。
惊喜不断 2015-01-29
  • 打赏
  • 举报
回复
Blob分段 这种技术,新版数据库已经不推荐使用了,存路径。
CapAvenger 2015-01-29
  • 打赏
  • 举报
回复
引用 2 楼 Z65443344 的回复:
主从表的话, 主表结构: 主键(Id) 文件信息 从表结构: 主键(ID) 外键(主表ID) 分段信息(顺序) 二进制文件片段
我记得有个Blob分段上传的

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧