高手来~~c# MySql 存储大文件
本人想把本地文件都存入MySql数据库中,如图片,office文件,还有大文件比如视频。在网上搜索了很多,都说用文件流的方式,我能实现,代码:stringsql="ins...
本人想把本地文件都存入MySql数据库中,如图片,office文件,还有大文件比如视频。在网上搜索了很多,都说用文件流的方式,我能实现,代码:
string sql = "insert into test_file.file_system (picture) values (?a) ";
MySqlCommand MyCommand = new MySqlCommand(sql, MyConnection);
MyCommand.CommandText = sql;
FileStream mystream = new FileStream(str_file, FileMode.Open, FileAccess.Read);
long len = mystream.Length;
MyCommand.Parameters.Add("?a", MySqlDbType.Blob, (int)len, "picture");
MyCommand.Parameters["?a"].Direction = System.Data.ParameterDirection.Input;
byte[] box = new byte[len];
mystream.Read(box, 0, (int)len);
MyCommand.Parameters["?a"].Value = box;
//更新
MyCommand.ExecuteNonQuery();
mystream.Close();
但是,我如果想存大文件,必须把MySql的默认Max Package Size = 1M 改了,改成想要的最大文件,但是如果我有一个10G的文件,仍然用这种方法,把Max Package Size 改成10G,那服务器会崩溃的。。。。。。
问题:有没有办法我不改mysql默认的Max Package Size = 1M ,用流把数据分块,每次1M,这样去插入数据库,跪求思路和代码!
我现在就有30分,如果有思路的,之后全奉上~ 展开
string sql = "insert into test_file.file_system (picture) values (?a) ";
MySqlCommand MyCommand = new MySqlCommand(sql, MyConnection);
MyCommand.CommandText = sql;
FileStream mystream = new FileStream(str_file, FileMode.Open, FileAccess.Read);
long len = mystream.Length;
MyCommand.Parameters.Add("?a", MySqlDbType.Blob, (int)len, "picture");
MyCommand.Parameters["?a"].Direction = System.Data.ParameterDirection.Input;
byte[] box = new byte[len];
mystream.Read(box, 0, (int)len);
MyCommand.Parameters["?a"].Value = box;
//更新
MyCommand.ExecuteNonQuery();
mystream.Close();
但是,我如果想存大文件,必须把MySql的默认Max Package Size = 1M 改了,改成想要的最大文件,但是如果我有一个10G的文件,仍然用这种方法,把Max Package Size 改成10G,那服务器会崩溃的。。。。。。
问题:有没有办法我不改mysql默认的Max Package Size = 1M ,用流把数据分块,每次1M,这样去插入数据库,跪求思路和代码!
我现在就有30分,如果有思路的,之后全奉上~ 展开
1个回答
展开全部
如果分块的话那我觉得要建立一个表,专门存放这些分块,表的结构为
id 文件的ID号
subVolumeID 文件的分卷号,即:如果该文件有两个分块那么就有1、2两条记录
data 文件的对应分卷号的数据。
在保存文件的时候,先判断需要分多少块,然后以每块一条记录的插入上面所讲的表结构中。
同样,要取的时候就查询此表,然后按照分卷号顺序把文件组合回来即可。
以上就是思路,代码的话可以根据你上面提供的改一下就可以了,不过要注意的是插入记录时要启动事务,避免插入不完整的文件数据。
id 文件的ID号
subVolumeID 文件的分卷号,即:如果该文件有两个分块那么就有1、2两条记录
data 文件的对应分卷号的数据。
在保存文件的时候,先判断需要分多少块,然后以每块一条记录的插入上面所讲的表结构中。
同样,要取的时候就查询此表,然后按照分卷号顺序把文件组合回来即可。
以上就是思路,代码的话可以根据你上面提供的改一下就可以了,不过要注意的是插入记录时要启动事务,避免插入不完整的文件数据。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询