webservice跨域上传图片
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跨域上传图片的更多相关文章
- ueditor富文本编辑器跨域上传图片解决办法
在使用百度富文本编辑器上传图片的过程中,如果是有一台单独的图片服务器就需要将上传的图片放到图片服务器,比如在a.com的编辑器中上传图片,图片要保存到img.com,这就涉及到跨域上传图片,而在ued ...
- JS-JQuery(JSONP)调用WebService跨域若干技术点
1.JSONP:JSON With Padding,让网页从别的网域获取信息,也就是跨域获取信息,可以当做是一种“工具”,大多数架构Jquery.EXTjs等都支持. 由于同源策略,一般来说位于 se ...
- 项目二(业务GO)——跨域上传图片(请求接口)
之前,就听过“跨域上传”图片的问题,只是疏于研究,也就一再搁置,直至今天再次遇见这个不能避免的“坑”,才不得不思考一下,怎么“跨域上传”图片或者文件? 问题来源: 何为“跨域”? ——就是给你一个接口 ...
- Ajax请求WebService跨域问题 [转载]
1.背景 用Jquery中Ajax方式在asp.net开发环境中WebService接口的调用 2.出现的问题 原因分析:浏览器同源策略的影响(即JavaScript或Cookie只能访问同域下的内容 ...
- 解决api、WebService跨域问题
webapi接口在ajax调用的很多情况下都会出现跨域问题,同样的WebService如果想用ajax调用,也需要接口跨域问题,解决方案如下: 1.IIS配置 打开IIS选择发布后的webapi或者是 ...
- Sliverlight调用WebService跨域问题解决
在SilverlightApplication正常添加webservice(承载网站中建webservice,这样就不存在跨域问题了,即域名一样如:localhost:4676) http://loc ...
- django —— KindEditor - 跨域上传图片
#跨域上传方法 def frontupload(request): if request.method == 'POST': item = {} file = request.FILES.get('i ...
- ajax访问WebService跨域问题
1.先看一个网站介绍,了解跨域问题 HTTP访问控制(CORS) 2.像谷歌.火狐浏览器对一些非简单请求会触发预检请求,首先使用 OPTIONS 方法发起一个预检请求到服务器,然而IE浏览器 ...
- ajax调用webservice 跨域问题
用js或者jquery跨域调用接口时 对方的接口需要做jsonp处理,你的ajax jsonp调用才可以 egg 接口中已经做了jsonp处理,所以可以跨域调用 //$.ajax({ // url: ...
随机推荐
- JS中的prototype属性
JavaScript是基于对象的,任何元素都可以看成对象.然而,类型和对象是不同的.本文中,我们除了讨论类型和对象的一些特点之外,更重要的 是研究 如何写出好的并且利于重用的类型.毕竟,JavaSc ...
- 提示text还能输入多少字节
1.添加jQuery自定义扩展 $(function($){ // tipWrap: 提示消息的容器 // maxNumber: 最大输入字符 $.fn.artTxtCount = function( ...
- chroot 的用途
http://www.ibm.com/developerworks/cn/linux/l-cn-chroot/ http://liyongxian.blog.51cto.com/432519/1126 ...
- JS 之 offsetWidth\offsetleft
- iOS点滴- ViewController详解
一.生命周期 当一个视图控制器被创建,并在屏幕上显示的时候. 代码的执行顺序 1. alloc 创建对象,分配空间 2.init (initW ...
- Spring——jar包详解
org.springframework.aop ——Spring的面向切面编程,提供AOP(面向切面编程)的实现 org.springframework.asm——spring 2.5.6的时候需要a ...
- MyDatePicker拆分日期显示到不同TextBox
如图所示效果:年—月—日 时—分—秒 <tr> <td align="center" style="background- ...
- JavaScript之面向对象学习二(原型属性对象与in操作符)获取对象中所有属性的方法
1.原型属性对象于in操作符之in单独使用 有两种方式使用in操作符:单独使用和在for-in循环中使用.在单独使用中,代码如下: function Person(){ } Person.protot ...
- Html5 Video的使用
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- oracle归档日志
前几天因为导入大的东西,弄得很久都没动静,一看最后才发现是归档满了.但是很多的命令还是很是很不熟悉,所以看了下,百度了下.整理下这个. 1.查看归档日志大小及使用情况 select * from v$ ...