首页 > 代码库 > webservice跨域上传图片

webservice跨域上传图片

1.上传文件,在一般处理程序中处理

 1 //1.接收post过来的文件 2 HttpPostedFile file = context.Request.Files[0]; 3 if (file.ContentLength > 0 || file.ContentLength > 1024) 4 { 5     if (file.ContentType.Contains("image/")) 6     { 7         //2.讲文件转换为文件流 8         Stream stream = file.InputStream; 9         //3.创建容纳文件流的byte数组10         byte[] buff = new byte[stream.Length];11         //4.将流存储进byte数组中12         stream.Read(buff, 0, buff.Length);13         //5.将byte数组转换为base64字符串14         string strParam = Convert.ToBase64String(buff);15         //6.调用webService方法,传入文件字符串16         srImg.wsImgSoapClient cl = new srImg.wsImgSoapClient();17         int result = cl.AddFile(strParam);18         if (result == 0)19         {20             context.Response.Write("上传成功");21         }22     }23     else24     {25         context.Response.Write("您上传的不是图片类型");26     }27 }28 else29 {30     context.Response.Write("您上传的文件大小错误");31 }
ashx后台处理上传文件

 

2.在webService方法中做如下处理:

 1 #region 通过流保存图片文件 2 /// <summary> 3 /// 通过流保存图片文件 4 /// </summary> 5 /// <param name="streamStr">文件流字符串</param> 6 /// <returns></returns> 7 [WebMethod] 8 public int AddFile(string streamStr) 9 {10     //1.将文件字符流转换为byte数组11     byte[] imageBytes = Convert.FromBase64String(streamStr);12     //2.根据数组获取存储区内存流13     MemoryStream stream = new MemoryStream(imageBytes);14     //3.根据file获取stream流,然后根据流生成image对象15     using (Image img = Image.FromStream(stream))16     {17         //设置压缩率18         double rate = 1;19         //开始压缩文件20         return ThumImg(img, rate);21     }22 } 
webservice

 

3.通用简单压缩方法,需要搜索更好的优化方法

 1 #region 压缩文件 2 /// <summary> 3 /// 压缩文件 4 /// </summary> 5 /// <param name="img">图片对象</param> 6 /// <param name="rate">压缩率</param> 7 /// <returns></returns> 8 public int ThumImg(Image img, double rate) 9 {10     //1.创建新的压缩位图11     using (Image thumImg = new Bitmap((int)(img.Width * rate), (int)(img.Height * rate)))12     {13         using (Graphics g = Graphics.FromImage(thumImg))14         {15             //2.在压缩图片按原图画出缩小版的图16             g.DrawImage(img, new Rectangle(0, 0, thumImg.Width, thumImg.Height), new Rectangle(0, 0, img.Width, img.Height), GraphicsUnit.Pixel);17         }18         //3.存储图片文件19         string phyPath = System.Web.HttpContext.Current.Server.MapPath("/upload/");20         thumImg.Save(phyPath + Guid.NewGuid().ToString() + "." + GetImageFormat(thumImg), System.Drawing.Imaging.ImageFormat.Jpeg);21         return 0;22     }23 } 24 #endregion
图片压缩方法

 

4.通过image对象判断图片后缀方法

 1 #region 返回图片格式(和文件名后缀无关) 2 /// <summary> 3 /// 返回图片格式(和文件名后缀无关) 4 /// </summary> 5 /// <param name="strImgPath">图片路径及名称</param> 6 /// <returns>jpeg\gif\bmp\png\tif\icon\wmf</returns> 7 string GetImageFormat(Image imgSrc) 8 { 9     string strImgFormat = "jpg";10     if (imgSrc.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Jpeg))11         strImgFormat = "jpeg";12     else if (imgSrc.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Gif))13         strImgFormat = "gif";14     else if (imgSrc.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Bmp))15         strImgFormat = "bmp";16     else if (imgSrc.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Png))17         strImgFormat = "png";18     else if (imgSrc.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Tiff))19         strImgFormat = "tiff";20     else if (imgSrc.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Icon))21         strImgFormat = "icon";22     else if (imgSrc.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Wmf))23         strImgFormat = "wmf";24     return strImgFormat;25 } 26 #endregion
通过image对象判断后缀

 

webservice跨域上传图片