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     else

24     {

25         context.Response.Write("您上传的不是图片类型");

26     }

27 }

28 else

29 {

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)