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

 //1.接收post过来的文件
HttpPostedFile file = context.Request.Files[];
if (file.ContentLength > || file.ContentLength > )
{
if (file.ContentType.Contains("image/"))
{
//2.讲文件转换为文件流
Stream stream = file.InputStream;
//3.创建容纳文件流的byte数组
byte[] buff = new byte[stream.Length];
//4.将流存储进byte数组中
stream.Read(buff, , buff.Length);
//5.将byte数组转换为base64字符串
string strParam = Convert.ToBase64String(buff);
//6.调用webService方法,传入文件字符串
srImg.wsImgSoapClient cl = new srImg.wsImgSoapClient();
int result = cl.AddFile(strParam);
if (result == )
{
context.Response.Write("上传成功");
}
}
else
{
context.Response.Write("您上传的不是图片类型");
}
}
else
{
context.Response.Write("您上传的文件大小错误");
}

ashx后台处理上传文件

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

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

webservice

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

 #region 压缩文件
/// <summary>
/// 压缩文件
/// </summary>
/// <param name="img">图片对象</param>
/// <param name="rate">压缩率</param>
/// <returns></returns>
public int ThumImg(Image img, double rate)
{
//1.创建新的压缩位图
using (Image thumImg = new Bitmap((int)(img.Width * rate), (int)(img.Height * rate)))
{
using (Graphics g = Graphics.FromImage(thumImg))
{
//2.在压缩图片按原图画出缩小版的图
g.DrawImage(img, new Rectangle(, , thumImg.Width, thumImg.Height), new Rectangle(, , img.Width, img.Height), GraphicsUnit.Pixel);
}
//3.存储图片文件
string phyPath = System.Web.HttpContext.Current.Server.MapPath("/upload/");
thumImg.Save(phyPath + Guid.NewGuid().ToString() + "." + GetImageFormat(thumImg), System.Drawing.Imaging.ImageFormat.Jpeg);
return ;
}
}
#endregion

图片压缩方法

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

 #region 返回图片格式(和文件名后缀无关)
/// <summary>
/// 返回图片格式(和文件名后缀无关)
/// </summary>
/// <param name="strImgPath">图片路径及名称</param>
/// <returns>jpeg\gif\bmp\png\tif\icon\wmf</returns>
string GetImageFormat(Image imgSrc)
{
string strImgFormat = "jpg";
if (imgSrc.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Jpeg))
strImgFormat = "jpeg";
else if (imgSrc.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Gif))
strImgFormat = "gif";
else if (imgSrc.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Bmp))
strImgFormat = "bmp";
else if (imgSrc.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Png))
strImgFormat = "png";
else if (imgSrc.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Tiff))
strImgFormat = "tiff";
else if (imgSrc.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Icon))
strImgFormat = "icon";
else if (imgSrc.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Wmf))
strImgFormat = "wmf";
return strImgFormat;
}
#endregion

通过image对象判断后缀

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

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

    在使用百度富文本编辑器上传图片的过程中,如果是有一台单独的图片服务器就需要将上传的图片放到图片服务器,比如在a.com的编辑器中上传图片,图片要保存到img.com,这就涉及到跨域上传图片,而在ued ...

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

    1.JSONP:JSON With Padding,让网页从别的网域获取信息,也就是跨域获取信息,可以当做是一种“工具”,大多数架构Jquery.EXTjs等都支持. 由于同源策略,一般来说位于 se ...

  3. 项目二(业务GO)——跨域上传图片(请求接口)

    之前,就听过“跨域上传”图片的问题,只是疏于研究,也就一再搁置,直至今天再次遇见这个不能避免的“坑”,才不得不思考一下,怎么“跨域上传”图片或者文件? 问题来源: 何为“跨域”? ——就是给你一个接口 ...

  4. Ajax请求WebService跨域问题 [转载]

    1.背景 用Jquery中Ajax方式在asp.net开发环境中WebService接口的调用 2.出现的问题 原因分析:浏览器同源策略的影响(即JavaScript或Cookie只能访问同域下的内容 ...

  5. 解决api、WebService跨域问题

    webapi接口在ajax调用的很多情况下都会出现跨域问题,同样的WebService如果想用ajax调用,也需要接口跨域问题,解决方案如下: 1.IIS配置 打开IIS选择发布后的webapi或者是 ...

  6. Sliverlight调用WebService跨域问题解决

    在SilverlightApplication正常添加webservice(承载网站中建webservice,这样就不存在跨域问题了,即域名一样如:localhost:4676) http://loc ...

  7. django —— KindEditor - 跨域上传图片

    #跨域上传方法 def frontupload(request): if request.method == 'POST': item = {} file = request.FILES.get('i ...

  8. ajax访问WebService跨域问题

    1.先看一个网站介绍,了解跨域问题    HTTP访问控制(CORS) 2.像谷歌.火狐浏览器对一些非简单请求会触发预检请求,首先使用 OPTIONS   方法发起一个预检请求到服务器,然而IE浏览器 ...

  9. ajax调用webservice 跨域问题

    用js或者jquery跨域调用接口时 对方的接口需要做jsonp处理,你的ajax jsonp调用才可以 egg 接口中已经做了jsonp处理,所以可以跨域调用 //$.ajax({ // url: ...

随机推荐

  1. 3D模型选中显示样式改变

    osg::ref_ptr<osg::Material> material = new osg::Material(); //模型材质信息 material->setTranspare ...

  2. Get Intellisense for .axml files in Visual Studio

    原文Get Intellisense for .axml files in Visual Studio So in order to get some intellisense support for ...

  3. hdu - 1757 - A Simple Math Problem

    题意:当x < 10时, f(x) = x: 当x >= 10 时,f(x) = a0 * f(x-1) + a1 * f(x-2) +  + a2 * f(x-3) + …… + a9 ...

  4. ActiveMQ使用STOMP协议的一个错误问题:Unexpected ACK received for message-id

    使用某些语言环境下的stomp包(比如php python ruby),可能会出现如下问题: Unexpected ACK received for message-id 这一般可能有两个原因. 1. ...

  5. Java中文乱码问题研究(二)

    上面写了console的乱码问题,接下来写的是web中servlet中的问题,大楷我比较关心一点,因为遇到这个的情况多一些吧.直接开始吧. 2. jsp和servlet中的乱码问题 分析: a. 其实 ...

  6. ItextSharp代码示例

    示例代码目录 示例代码0101. 5 示例代码0102. 7 示例代码0103. 9 示例代码0104. 11 示例代码0105. 13 示例代码0106. 15 示例代码0107. 17 示例代码0 ...

  7. Spoken English

    The Business lunch 9.商务午餐怎样开场?[0731] Is this your first time in shanghai? 10.怎样询问对方的感受?[0801] How do ...

  8. 百度Map调用

    baiduMap API 根据地址查询经纬度 http://api.map.baidu.com/geocoder?address=要查询的地址&output=json&key=你的ke ...

  9. java数据库连接

    注意点: 1.所有和数据库相关的(jdbc)包都是java.sql.*: 2.将项目所需的jar包统一复制到web-inf/lib文件夹中. 一:sqlsever数据库 package dbcon; ...

  10. CentOS6.3下安装配置SVN(Subversion)

    #检查是否安装了低版本的SVN [root@localhost ~]# rpm -qa subversion subversion--.el6.x86_64 #卸载旧版本SVN [root@local ...