急C# 高手进来帮忙 以二进制上传大文件到数据库

zhangby1 2009-03-16 04:07:29
以二进制分块上传大文件到数据库要怎么实现。
各位帮帮忙,最好提供代码。
...全文
764 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
jlj84237485 2009-03-18
  • 打赏
  • 举报
回复
帮顶一下
niphone 2009-03-18
  • 打赏
  • 举报
回复
还可以用linq来写,这样代码会更简洁一些!
Teng_s2000 2009-03-18
  • 打赏
  • 举报
回复
周公就是强,还比较积极啊
xiaoyuan402 2009-03-18
  • 打赏
  • 举报
回复
个人建议保存到文件夹,路径保存到数据库。如果访问的人数多了,你的服务器会越来越慢的。每个人都要从数据库中读取文件
birdlonger 2009-03-18
  • 打赏
  • 举报
回复
mark && up
ifanst 2009-03-18
  • 打赏
  • 举报
回复
楼上说的很对,那样会减少网页的打开速度的.数据太大打开的速度一定很慢.
冷月孤峰 2009-03-18
  • 打赏
  • 举报
回复
2楼已经给出详细代码了
不过个人建议,如果是大文件的话,还是不要传入数据库中,建议直接上传到服务器指定位置,数据库中记录连接地址
zhangby1 2009-03-17
  • 打赏
  • 举报
回复
上面都不是我想要的结果

难道就没有人能做得出来吗?
zzxap 2009-03-17
  • 打赏
  • 举报
回复
数据大,建议保存到文件夹,路径保存到数据库
jhdxhj 2009-03-17
  • 打赏
  • 举报
回复
ding
A海阔天空 2009-03-17
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 zzxap 的回复:]
数据大,建议保存到文件夹,路径保存到数据库
[/Quote]


正解!
gisyellow 2009-03-16
  • 打赏
  • 举报
回复
转换成字节数组,然后用参数的方式上传。
wuyq11 2009-03-16
  • 打赏
  • 举报
回复
public byte[] UpLoadFile(HtmlInputFile f_IFile)
{
 HttpPostedFile upFile=f_IFile.PostedFile;
 int upFileLength=upFile.ContentLength;
 string contentType = upFile.ContentType;
 byte[] FileArray=new Byte[upFileLength];
Stream fileStream=upFile.InputStream;
fileStream.Read(FileArray,0,upFileLength);
 return FileArray;
}

liu4545533 2009-03-16
  • 打赏
  • 举报
回复
个人感觉这个两个算法都不是很好 应该要是用缓存
cppfaq 2009-03-16
  • 打赏
  • 举报
回复
Google: c# 大文件 数据库 上传
nmfengyun 2009-03-16
  • 打赏
  • 举报
回复
网上搜搜
肯定有此内容的
nmfengyun 2009-03-16
  • 打赏
  • 举报
回复

/// <summary>
/// 以二进制形式存取图片
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>


private void openFileDialog1_FileOk(object sender, CancelEventArgs e)
{
try
{
this.pictureBox1.Image = Image.FromStream(this.openFileDialog1.OpenFile());
string str = openFileDialog1.FileName.ToString();
//将指定路径的文件添加到FileStream类中
FileStream fs = new FileStream(str, FileMode.Open, FileAccess.Read);
//通过FileStream类对象实例化BinaryReader类
BinaryReader br = new BinaryReader(fs);
//通过BinaryReader类对象的ReadBytes()方法将FileStream类对象转化为二进制数组
imgBytesIn = br.ReadBytes((int)fs.Length);
//MessageBox.Show(imgBytesIn.ToString());
}
catch
{
MessageBox.Show("您选择的图片不能被读取或文件类型不对!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Warning);
this.pictureBox1.Image = null;
}
}
string tablename = "cpic";
private void btAddPic_Click(object sender, EventArgs e)
{
//new Db().InsertInfo_Clpic(cph, imgBytesIn);
if (this.pictureBox1.Image == null)
{
return;
}
new Db().InsertInfo_Clpic(tablename,cph, imgBytesIn);
new Db().CloseConnection();
btAddPic.Enabled = false;
MessageBox.Show("添加成功!");
btUpPic.Enabled = true;
btDelPic.Enabled = true;
}
shangwei97 2009-03-16
  • 打赏
  • 举报
回复
学习,帮顶
ztenv 2009-03-16
  • 打赏
  • 举报
回复
建议分层来做,服务器和客户端之间定义一种传协议,然后把大文件分为几块,一块一块的去传,这样做断点续传也好做一些;不要直接用ado.net来做,
周公 2009-03-16
  • 打赏
  • 举报
回复
读取数据库中Image字段内容:

int fileId;
//如果传过来的参数能转换成数字
if (int.TryParse(Request.QueryString["FileID"], out fileId))
{
string sql = "select Mime,FileData from FileList where FileID=@FileID";
//SqlDbHelper是我们自己编写的数据库通用类
SqlDbHelper helper = new SqlDbHelper(ConfigurationManager.ConnectionStrings["Conn"].ConnectionString);
SqlParameter[] parameters = new SqlParameter[1];
parameters[0] = new SqlParameter("@FileID", SqlDbType.Int, 4);
parameters[0].Value = fileId;
SqlDataReader reader = helper.ExecuteReader(sql,CommandType.Text,parameters);
byte[] data = null;
string mime = string.Empty;
//如果存在图片记录,所以按编号查询最多只有一条记录
//这里就用if判断而不用while循环
if (reader.Read())
{
//将数据库中的image字段保存的数据转换成byte[]
data = (byte[])(reader["FileData"]);
mime = (string)(reader["mime"]);
}
reader.Close();//读取数据之后及时关闭Reader对象
if (data != null && data.Length > 0)
{
Response.Clear();//清空所有输出
Response.ContentType = mime;//设置MIME为图象对应的MIME
//因为不存在直接将byte[]转换成图象的方法
//所以利用byte[]来构建内存流对象
MemoryStream memoryStream = new MemoryStream(data);
//利用流对象构建Bitmap对象
Bitmap image = new System.Drawing.Bitmap(memoryStream);
//将Bitmap保存到Response对象的输出流当中
image.Save(Response.OutputStream, ImageFormat.Jpeg);
image.Dispose();//释放Bitmap对象
Response.End();
}
}

关键是将数据库字段的内容读取出来转换成字节数组,有文件的字节数组就可以创建具体的文件用于操作的。
加载更多回复(3)

111,126

社区成员

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

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

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