怎么将图片先转成缩略图再存入数据库中呢?
由于虚拟目录不允许写入,所以不能使用先将上传图片转成缩略图文件,
再将缩略图存入数据库中的办法。
望指教!在线等! 问题点数:26、回复次数:11Top
1 楼net_lover(【孟子E章】)回复于 2006-01-17 19:04:52 得分 5
和直接上传到数据库没什么差别,只是多了一个过程Top
2 楼net_lover(【孟子E章】)回复于 2006-01-17 19:05:38 得分 0
http://www.aspxboy.com/private/218/default.aspxTop
3 楼uxuan(uxuan)回复于 2006-01-17 19:30:08 得分 0
可是我的缩略图转不到数据流中去,有网址,太好了,我先去看看!Top
4 楼uxuan(uxuan)回复于 2006-01-17 21:09:54 得分 0
我看了一下网站,他还是要做个临时文件的,
现在问题是虚拟目录不能写入文件,怎样这个过程在
内存中完成呢?Top
5 楼nekiy(不想再做美工了,要当个真正的程序员)回复于 2006-01-17 21:27:20 得分 0
学习
mark一下
Top
6 楼misng(沦落人)回复于 2006-01-17 21:38:40 得分 16
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 οnlοad=window.alert('数据提交成功!"+intLength.ToString() +"');></body>");
Top
7 楼misng(沦落人)回复于 2006-01-17 21:41:34 得分 0
image.Save(imageStream,image.RawFormat);
这一句改一下,thumbImage(imageStream,image.RawFormat);Top
8 楼appleat(Appleat)回复于 2006-01-17 23:52:13 得分 5
我写的一个函数
/// <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);
}
}Top
9 楼appleat(Appleat)回复于 2006-01-17 23:54:46 得分 0
我是上传到某一目录下的,仅供参考Top
10 楼uxuan(uxuan)回复于 2006-01-18 12:35:22 得分 0
谢谢大家了,我的问题解决了!
特别感谢misng(沦落人),
顺便对misng(沦落人)说一下,
imageStream.Read(fileData,0,intLength);
前需加一句
imageStream.position=0; //否则写不到数组中去!Top
11 楼misng(沦落人)回复于 2006-01-18 13:16:42 得分 0
谢谢,昨天我也在找问题,我刚找到了imageStream.toArray();