怎么将图片先转成缩略图再存入数据库中呢 怎么将图片先转成缩略图再存入数据库中呢?由于虚拟目录不允许写入,所以不能使用先将上传图片转成缩略图文件,再将缩略图存入数据库中的办法。望指教!在线等! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://www.aspxboy.com/private/218/default.aspx System.Web.HttpPostedFile postedFile = files[0]; string fileName,fileExtention ; fileName = System.IO.Path.GetFileName(postedFile.FileName); fileExtention = System.IO.Path.GetExtension(fileName).ToUpper(); if (fileExtention.Trim()==".GIF"||fileExtention.Trim()==".JPG"||fileExtention.Trim()==".JPEG") { System.Drawing.Image image=System.Drawing.Image.FromStream(postedFile.InputStream); System.Drawing.Image thumbImage = image.GetThumbnailImage(image.Size.Width/2,image.Size.Height/2,null,System.IntPtr.Zero); System.IO.MemoryStream imageStream; imageStream=new System.IO.MemoryStream(); image.Save(imageStream,image.RawFormat); int intLength=Convert.ToInt32(imageStream.Length); byte[] fileData = new byte[intLength]; imageStream.Read(fileData,0,intLength); Response.Write(fileData[0].ToString()+"<br>" +intLength.ToString()); OleDbConnection oleConn; string oleConnString; oleConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + System.Web.HttpContext.Current.Server.MapPath(System.Web.HttpContext.Current.Request.ApplicationPath + "/datadase_mydb/") + "db.mdb"; oleConn = new OleDbConnection(oleConnString); System.Data.OleDb.OleDbCommand insertCmd; insertCmd=new OleDbCommand ("INSERT INTO DBOS_Sl (DBOS_Sl_Type,DBOS_Father_ID,DBOS_Sl_Qtype,DBOS_Sl_Data,DBOS_Sl_Qty)" + "VALUES (@Sl_Type,@Father_ID,@Sl_Qtype,@Sl_Data,@Sl_Qty)", oleConn); System.Data.OleDb.OleDbParameter pSl_Type = new OleDbParameter("@Sl_Type", System.Data.OleDb.OleDbType.VarChar,10); pSl_Type.Value="image"; insertCmd.Parameters.Add(pSl_Type); System.Data.OleDb.OleDbParameter pSl_Father_ID = new OleDbParameter("@Father_ID",System.Data.OleDb.OleDbType.Integer); pSl_Father_ID.Value=123; insertCmd.Parameters.Add(pSl_Father_ID); System.Data.OleDb.OleDbParameter pSl_Qtype=new OleDbParameter("@Sl_Qtype",System.Data.OleDb.OleDbType.VarChar,4); pSl_Qtype.Value=image.RawFormat.ToString(); insertCmd.Parameters.Add(pSl_Qtype); System.Data.OleDb.OleDbParameter pSl_Data = new OleDbParameter("@Sl_Data",System.Data.OleDb.OleDbType.Binary); pSl_Data.Value=fileData; insertCmd.Parameters.Add(pSl_Data); System.Data.OleDb.OleDbParameter pSl_Qty = new OleDbParameter("@Sl_Qty",System.Data.OleDb.OleDbType.Boolean); pSl_Qty.Value=false; insertCmd.Parameters.Add(pSl_Qty); oleConn.Open(); insertCmd.ExecuteNonQuery(); if (oleConn.State == ConnectionState.Open) { oleConn.Close(); } Response.Write("<body onload=window.alert('数据提交成功!"+intLength.ToString() +"');></body>"); image.Save(imageStream,image.RawFormat);这一句改一下,thumbImage(imageStream,image.RawFormat); 我写的一个函数/// <summary> /// 上传图片缩略图 /// </summary> /// <param name="postfile"> httpPostFile类型</param> /// <param name="maxWidth">缩略图最大宽度</param> /// <param name="imgExt">图片扩展名</param> /// <param name="filePath">要保存的绝对路径</param> /// <param name="fileName">要保存的文件名</param> /// <returns>bool</returns> public static bool upPicToSmall(System.Web.HttpPostedFile postfile,int maxWidth,string imgExt,string filePath,string fileName) { System.Drawing.Image img = null; try { if(imgExt==".jpg"||imgExt==".gif") { img = System.Drawing.Image.FromStream(postfile.InputStream); if(img.Width>maxWidth) { int thisHeight = img.Height * maxWidth / img.Width; img = img.GetThumbnailImage(maxWidth,thisHeight,null,IntPtr.Zero); } switch(imgExt) { case ".jpg": img.Save(filePath + fileName,System.Drawing.Imaging.ImageFormat.Jpeg); break; case ".gif": img.Save(filePath + fileName,System.Drawing.Imaging.ImageFormat.Gif); break; } img.Dispose(); return true; } else { Alert("上传文件格式不对!"); return false; } } catch(Exception ex) { throw new Exception(ex.Message); } } 谢谢大家了,我的问题解决了!特别感谢misng(沦落人),顺便对misng(沦落人)说一下,imageStream.Read(fileData,0,intLength);前需加一句imageStream.position=0; //否则写不到数组中去! 谢谢,昨天我也在找问题,我刚找到了imageStream.toArray(); 多级树形菜单的位置显示问题,如何给二级以后的菜单加竖线? button背景图片变形了? 存储过程中的动态变量 asp.net控件样式问题? 请问一句c#代码的意思 "xxx"(某类) 并不包含 "yyy"(某方法) 的定义 如何用ASP.NET从一台服务器上往另一台服务器上上传文件(急!!!在线等...) 为何打印不一样? 怎样去掉datagrid中的Command Button的text 的下划线? 帮忙~~关于datagrid的问题 大伙好!请问DW中设计界面的问题。 页脚的文本框判断是否是数字
string fileName,fileExtention ;
fileName = System.IO.Path.GetFileName(postedFile.FileName);
fileExtention = System.IO.Path.GetExtension(fileName).ToUpper();
if (fileExtention.Trim()==".GIF"||fileExtention.Trim()==".JPG"||fileExtention.Trim()==".JPEG")
{ System.Drawing.Image image=System.Drawing.Image.FromStream(postedFile.InputStream);
System.Drawing.Image thumbImage = image.GetThumbnailImage(image.Size.Width/2,image.Size.Height/2,null,System.IntPtr.Zero);
System.IO.MemoryStream imageStream;
imageStream=new System.IO.MemoryStream();
image.Save(imageStream,image.RawFormat);
int intLength=Convert.ToInt32(imageStream.Length);
byte[] fileData = new byte[intLength];
imageStream.Read(fileData,0,intLength);
Response.Write(fileData[0].ToString()+"<br>" +intLength.ToString());
OleDbConnection oleConn;
string oleConnString;
oleConnString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + System.Web.HttpContext.Current.Server.MapPath(System.Web.HttpContext.Current.Request.ApplicationPath + "/datadase_mydb/") + "db.mdb";
oleConn = new OleDbConnection(oleConnString);
System.Data.OleDb.OleDbCommand insertCmd;
insertCmd=new OleDbCommand ("INSERT INTO DBOS_Sl (DBOS_Sl_Type,DBOS_Father_ID,DBOS_Sl_Qtype,DBOS_Sl_Data,DBOS_Sl_Qty)" +
"VALUES (@Sl_Type,@Father_ID,@Sl_Qtype,@Sl_Data,@Sl_Qty)", oleConn);
System.Data.OleDb.OleDbParameter pSl_Type = new OleDbParameter("@Sl_Type", System.Data.OleDb.OleDbType.VarChar,10);
pSl_Type.Value="image";
insertCmd.Parameters.Add(pSl_Type); System.Data.OleDb.OleDbParameter pSl_Father_ID = new OleDbParameter("@Father_ID",System.Data.OleDb.OleDbType.Integer);
pSl_Father_ID.Value=123;
insertCmd.Parameters.Add(pSl_Father_ID); System.Data.OleDb.OleDbParameter pSl_Qtype=new OleDbParameter("@Sl_Qtype",System.Data.OleDb.OleDbType.VarChar,4);
pSl_Qtype.Value=image.RawFormat.ToString();
insertCmd.Parameters.Add(pSl_Qtype); System.Data.OleDb.OleDbParameter pSl_Data = new OleDbParameter("@Sl_Data",System.Data.OleDb.OleDbType.Binary);
pSl_Data.Value=fileData;
insertCmd.Parameters.Add(pSl_Data); System.Data.OleDb.OleDbParameter pSl_Qty = new OleDbParameter("@Sl_Qty",System.Data.OleDb.OleDbType.Boolean);
pSl_Qty.Value=false;
insertCmd.Parameters.Add(pSl_Qty); oleConn.Open();
insertCmd.ExecuteNonQuery();
if (oleConn.State == ConnectionState.Open)
{
oleConn.Close();
}
Response.Write("<body onload=window.alert('数据提交成功!"+intLength.ToString() +"');></body>");
这一句改一下,thumbImage(imageStream,image.RawFormat);
/// <summary>
/// 上传图片缩略图
/// </summary>
/// <param name="postfile"> httpPostFile类型</param>
/// <param name="maxWidth">缩略图最大宽度</param>
/// <param name="imgExt">图片扩展名</param>
/// <param name="filePath">要保存的绝对路径</param>
/// <param name="fileName">要保存的文件名</param>
/// <returns>bool</returns>
public static bool upPicToSmall(System.Web.HttpPostedFile postfile,int maxWidth,string imgExt,string filePath,string fileName)
{
System.Drawing.Image img = null;
try
{
if(imgExt==".jpg"||imgExt==".gif")
{
img = System.Drawing.Image.FromStream(postfile.InputStream); if(img.Width>maxWidth)
{
int thisHeight = img.Height * maxWidth / img.Width;
img = img.GetThumbnailImage(maxWidth,thisHeight,null,IntPtr.Zero);
} switch(imgExt)
{
case ".jpg":
img.Save(filePath + fileName,System.Drawing.Imaging.ImageFormat.Jpeg);
break;
case ".gif":
img.Save(filePath + fileName,System.Drawing.Imaging.ImageFormat.Gif);
break;
}
img.Dispose();
return true;
}
else
{
Alert("上传文件格式不对!");
return false;
}
}
catch(Exception ex)
{
throw new Exception(ex.Message);
}
}
顺便对misng(沦落人)说一下,
imageStream.Read(fileData,0,intLength);
前需加一句
imageStream.position=0; //否则写不到数组中去!