您的位置:首页 > 数据库

ASP.NET C#(4.0) + SQL2008 R2 多图片上传并生成缩略图一并保存至数据库

2011-04-20 14:17 891 查看
网上类似上传并保存至数据库的文章不少,不知道是我环境不行,还是怎么得,总是有问题,而且也没同时成缩略图的,经过二天的调试,终于搞定,主要代码如下:

数据库结构

Images(ID int, Photo varbinary(MAX)
, smallPhoto varbinary(MAX)
)

前台代码

<form id="form1" runat="server" enctype="multipart/form-data">

<asp:FileUpload ID="imgPath" runat="server" Width="300px">

</form>

(注:多个FileUpload可使用js操作,js代码略)

后台代码

if (HttpContext.Current.Request.Files != null)
{
HttpFileCollection _files = HttpContext.Current.Request.Files;
for (int i = 0; i < _files.Count; i++)
{
if (_files[i] != null && _files[i].ContentLength != 0)
{
///处理上载的文件流信息。
byte[] b = new byte[_files[i].ContentLength];
Stream fs = (Stream)_files[i].InputStream;

fs.Read(b, 0, _files[i].ContentLength);
MemoryStream m = new MemoryStream();
Bitmap img = new Bitmap(fs);

//产生缩略图并保存
img.GetThumbnailImage(110, 135, null, new IntPtr()).Save(m, System.Drawing.Imaging.ImageFormat.Jpeg);
if (b.Length > 0 && (int)m.Length > 0)
{
string sql = "INSERT INTO Images(Photo,smallPhoto) VALUES(@Photo,@smallPhoto)";
SqlParameter[] parameters =
{
new SqlParameter("@Photo", SqlDbType.VarBinary),
new SqlParameter("@smallPhoto", SqlDbType.VarBinary)
};

parameters[0].Value = b;
parameters[1].Value = m.ToArray();

(存入数据库代码略)
}
}
}
}


目前我只测试了上传200K的图片没有任何问题,具体最大图片能到多少K,需要查询MSDN了

需要注意的是,我试过Image的数据类型,怎么都不行,使用varbinary(MAX)就没问题
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: