怎么将图片先转成缩略图再存入数据库中呢

楼主uxuan(uxuan) 2006-01-17 18:44:54 在 .NET技术 / ASP.NET 提问

怎么将图片先转成缩略图再存入数据库中呢?  
  由于虚拟目录不允许写入,所以不能使用先将上传图片转成缩略图文件,  
  再将缩略图存入数据库中的办法。  
  望指教!在线等! 问题点数: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(); 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值