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对象判断后缀

时间: 2024-11-01 22:10:28

webservice跨域上传图片的相关文章

JS-JQuery(JSONP)调用WebService跨域若干技术点

1.JSONP:JSON With Padding,让网页从别的网域获取信息,也就是跨域获取信息,可以当做是一种"工具",大多数架构Jquery.EXTjs等都支持. 由于同源策略,一般来说位于 server1.example.com 的网页无法与不是 server1.example.com的服务器沟通,而 HTML 的<script> 元素是一个例外.利用 <script> 元素的这个开放策略,网页可以得到从其他来源动态产生的 JSON 资料,而这种使用模式就

跨域上传图片的尝试过程,最终成功了。哈哈

关于这个跨域上传图片的问题,其实去年底的时候就该去实现的,因为老板朝三暮四,一会儿让做这个,一会儿看那个,就耽误了.因为这个过程花费了我整整一天的时间,我认为有必要记录下来. 首先,项目是一个ERP,针对的是公司的一个小型电商的网站.项目经理让我搭建一个图片服务器, 当时也是为了完(尝)成(尝)任(新)务(鲜),用的都是当时从没接触过的.通过百度就选择了 Nginx + Nodejs + express + ImageMagick 来实现的. 当时还简单看了一下淘宝的TFS(Taobao Fil

让 umeditor 支持跨域上传图片

事实上,umeditor 上传图片采用的是 form+隐藏iframe方式,已经能做到无刷新跨域上传.但小小遗憾的是做的并不完美,上传图片后,反馈的json信息,js并不能读取.原因在于,js不能操作跨域的iframe. 1 var r = this.contentWindow.document.body.innerHTML; 此句代码在FF Chrome上都会报错.浏览器的这种限制,可以通过两个方式来解决 换成flash上传 主页跟iframe页都设置 document.domain . 第一

关于JavaScript 访问基于SOAP的WebService跨域问题

关于JavaScript 访问基于SOAP的WebService跨域问题 最近,搭建好了一个基于SOAP的WebService服务器.结果,使用JavaScript访问WebService遇到了跨域的问题! 首先,声明代码中的WebService不是本人搭建,由于本人的服务器地址不方便公开. 这个是测试HTML <html> <meta charset="utf-8" /> <head> <title>通过ajax调用WebService

ueditor富文本编辑器跨域上传图片解决办法

在使用百度富文本编辑器的过程中,如果是有一台单独的图片服务器就需要将上传的图片内容放到图片服务器,也就是比如在a.com的编辑器上传图片,图片要保存到img.com的跨域上传图片功能,而在ueditor官方文档中说不支持单图上传的跨域, 网上查了一下各种花里胡哨,一顿操作猛如虎,比如加document.domain,配置全域名的等等都是然并卵,我仔细研究了一下ueditor的demo文件,相出了一个折中办法,很简单只需要修改demo中两个地方的代码外加写一个上传接口即可. 首先引入页面uedit

Ajax请求WebService跨域问题

1.背景 用Jquery中Ajax方式在asp.net开发环境中WebService接口的调用 2.出现的问题 原因分析:浏览器同源策略的影响(即JavaScript或Cookie只能访问同域下的内容); 3.解决方案: (1) JSONP:只支持GET方式 (2) CROS:跨域资源共享 以下为CROS解决方案: a.在WebService接口加上响应头信息: b.在web.config文件中加上相关配置节信息: 运用a或者b的解决方案后,浏览器头信息中变动如下: 最终问题得以较好的解决,但对

kindeditor4跨域上传图片解决

项目中正在使用kindeditor, 版本号4.1.10 非常多公司的图片会走CDN,须要单独的一台图片上传服务如:(upload.268xue.com) kindeditor上传图片的简单内部流程: 上传button是提交到iframe.生成1个form和1个iframe,form提交到(arget)iframe iframe的onload方法获取返回的值.然后调用配置回调方法afterUpload/afterError. 详细实现:(在a.com选中图片,上传用upload.268xue.c

解决jquery调用NET webservice跨域的问题

声明,解决方案由网上收集而来,个人整理.有别人的,也有我的. 一.webserive端 1.web.config 需要在web.config的configuration节点中加入如下的黑体部分内容. <system.web>    <webServices>      <protocols>        <add name="HttpGet" />        <add name="HttpPost" /&g

XMLHttpRequest 请求java部署的webservice 跨域问题

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" > <html> <head> <title>企业列表</title> </head> <body > </body> </html> <script type="text/javascript"> var webservic