mono -图片处理
这篇文章中您将了解到以下内容
保存Bitmap
WebClient文件上传
向服务端传递数据
保存Bitmap
做移动端开发,图片上传下载是最普通的需求了。
在mono for android中按照资料,下载网络图片的功能需要用流对象把图像转化为Bitmap,之后再保存,刚开始我是这么做的,看如下代码:filepath是网络图片url
URL url = new URL(filePath);
HttpURLConnection conn = (HttpURLConnection)url.OpenConnection();
Stream stream = conn.InputStream;
Bitmap bmp = BitmapFactory.DecodeStream(stream);
imageView.SetImageBitmap(bmp); 压缩图片 bm.Compress(Bitmap.CompressFormat.Jpeg, 100,stream); 或者类似的方法 fileName 是文件保存路径
FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.Write,FileShare.Read); System.IO.BufferedStream buf = new System.IO.BufferedStream(fs); 压缩图片 bm.Compress(Bitmap.CompressFormat.Jpeg, 100,stream);
buf.Close();
很悲惨,以上的方法行不通
WebClient文件上传
换一种解决方法,想到了另一个类,WebClient,提供上传下载的公开方法,
而且webclient类还可以利用相关的委托方法,来构建进度条。
文件上传
string filePath = @"E:map.jpg";
WebClient webClient = new WebClient();
Uri uri = new Uri("http://my.com/upload");
webClient.Credentials = CredentialCache.DefaultCredentials;
byte[] datas = webClient.UploadFile(uri, "put", filePath); ;
string response = System.Text.Encoding.UTF8.GetString(datas);
我原来的理解,按照上边的代码可以直接把文件存储到特定服务端网站my.com下的upload文件夹内。当然了,相关的写入和访问权限,我全部赋予。
错误紧接着出现了:
1 远程服务器返回错误: (405) 不允许的方法
是不是put方法指定的问题,大多数情况下请求模块谓词中不包含put方法。我开启服务端的put请求
主要涉及到 处理映射程序的 ExtensionlessUrlHandler-Integrated-4.0 模块,如下图所示


修改后没有效果
那我把put方法改成post?
错误依然存在。
2 网上有资料说,要开启WebDav服务。WebDav服务,也是个安全隐患设置,只要已开启,相关的权限设置就要一一处理。
开启webdav

结果 对于上传文件,一点帮助也没有
最终找了好多资料之后,我还是坚定了webclient也需要服务端接受程序的思路
string filePath = @"E:map.jpg";
WebClient webClient = new WebClient();
Uri uri = new Uri("http://my.com/file/upload");
webClient.Credentials = CredentialCache.DefaultCredentials;
webClient.UploadFileAsync(uri, "post", filePath);
以上代码中的 http://my.com/file/upload 是一个服务端接口处理程序,而不是一个特定的文件夹。这样不仅可以上传文件,还可以按照特定的逻辑处理文件存放的具体位置。
接下来我们看服务端
对于文件的接受,只需要以下一句核心代码
HttpPostedFileBase file = Request.Files["file"];
向服务端传递数据
同时是不是可以通过以下几种方式向服务端传递数据?
NameValueCollection collection = Request.Form;
NameValueCollection collection = Request.QueryString;
NameValueCollection collection = Request.Headers;
NameValueCollection collection = Request.Files;
Request.Form不起作用
虽然是post提交,Request.Form 却没有任何数据,按照我以上的代码,想从客户端向服务端post提交数据,也无从做起。
虽然post不行,但是可以采取 Request.QueryString的方式,服务端按照get请求直接接收userid即可。如下代码:
string filePath = @"E:map.jpg";
WebClient webClient = new WebClient();
Uri uri = new Uri("http://my.com/file/upload?userid=808");
webClient.Credentials = CredentialCache.DefaultCredentials;
webClient.UploadFileAsync(uri, "post", filePath);
或者接收Headers集合
webClient.Headers.Add("userid", "808");
总之,处理图片的逻辑,不管移动端还是普通的web端开发,总体的套路都大致一样。服务端api的使用增加了程序的灵活性, 客户端与服务端传值实际上是http协议的具体使用。 文章中的观点如有不妥的地方,希望大家留言讨论。
mono -图片处理的更多相关文章
- 【Xamarin挖墙脚系列:Mono项目的图标为啥叫Mono】
因为发起人大Boss :Miguel de lcaza 是西班牙人,喜欢猴子.................就跟Hadoop的创始人的闺女喜欢大象一样...................... 历 ...
- Mono for Android (4)-- 图片转为二进制,二进制转回图片
最近纠结蓝牙打印的问题,想着图片先转为二进制发给打印机,找了好多资料,终于成功了,贴出来共享一下 先是图片转换为二进制的: Bitmap bitmap = BitmapFactory.DecodeRe ...
- Mono for Android 显示远程图片
Main.axml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:an ...
- mono for android 读取网络远程图片
布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=& ...
- Mono自定义图片按钮
首先,我们编写一个MyImageButton类,继承自LinearLayout public class MyPhoneImageButton:LinearLayout { private Image ...
- mono for android 获取手机照片或拍照并裁剪保存
axml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android ...
- mono for android学习过程系列教程(1)
直接进入主题,关于mono for android的学习,首先配置好环境,如何配置环境,度娘谷歌一大堆,记得使用破解版. 我自己是百度“黑马四期”传智播客的视频,里面有破解版开发环境的软件. 今天直接 ...
- mono for android学习过程系列教程(2)
接着上一讲继续开始写,今天介绍的是安卓的基本组成结构. 在大多数情况下,MONO FOR ANDROID的命名空间和Android的命名空间 是互相映射的.有时候需要大小写,非字母数字字符的用法以及名 ...
- CentOS上 Mono 3.2.8运行ASP.NET MVC4经验
周一到周三,折腾了两天半的时间,经历几次周折,在小蝶惊鸿的鼎力帮助下,终于在Mono 3.2.8上运行成功MVC4.在此总结经验如下: 系统平台的版本: CentOS 6.5 Mono 3.2.8 J ...
随机推荐
- JavaScript 对数据处理的5个API
JavaScript对数据处理包括向上取整.向下取整.四舍五入.固定精度和固定长度5种方式,分别对应ceil,floor,round,toFixed,toPrecision等5个API,本文将对这5个 ...
- C语言 · 最大值与最小值计算
输入11个整数,计算它们的最大值和最小值. 样例输入 0 1 2 3 4 5 6 7 8 9 10 样例输出 10 0 #include<stdio.h> int main(){ ]; ...
- 移动web基本知识
1.pixel像素基础 1.px:csspixel 逻辑像素,浏览器所使用的抽象单位 2.dp,pt:设备无关像素 3.devicePixelPatio 设备像素缩放比例 2.viewport 1. ...
- C# 破解 Reflector8.5
一.分析 破解.net .dll,可以使用reflector,但官方提供的reflector是需要购买的,因此,破解reflector势在必行. 二.破解Reflector具体步骤 下面为详细的破解步 ...
- 关于微软HttpClient使用,避免踩坑
最近公司对于WebApi的场景使用也越来越加大了,随之而来就是Api的客户端工具我们使用哪个?我们最常用的估计就是HttpClient,在微软类库中命名空间地址:System.Net.Http,是一个 ...
- JavaScript中fn()和return fn()
看博客时,注意到return的重要性 参考:http://www.cnblogs.com/raoyunxiao/p/5644032.html 看似反常的例子: var i = 0; function ...
- .Net Core MVC 网站开发(Ninesky) 2.3、项目架构调整(续)-使用配置文件动态注入
上次实现了依赖注入,但是web项目必须要引用业务逻辑层和数据存储层的实现,项目解耦并不完全:另一方面,要同时注入业务逻辑层和数据访问层,注入的服务直接写在Startup中显得非常臃肿.理想的方式是,w ...
- 微软新神器-Power BI横空出世,一个简单易用,还用得起的BI产品,你还在等什么???
在当前互联网,由于大数据研究热潮,以及数据挖掘,机器学习等技术的改进,各种数据可视化图表层出不穷,如何让大数据生动呈现,也成了一个具有挑战性的可能,随之也出现了大量的商业化软件.今天就给大家介绍一款逆 ...
- mysql 学习总结
MYSQL的增.删.查.改 注册.授权 #创建一个对数据库中的表有一些操作权限的用户,其中OPERATION可以用all privileges替换,DBNAME.TABLENAME可以用*替换,表 ...
- VS2015常用快捷键总结
生成解决方案 F6,生成项目Shift+F6 调试执行F5,终止调试执行Shift+F5 执行调试Ctrl+F5 查找下一个F3,查找上一个Shift+F3 附加到进程Ctrl+Alt+P,逐过程F1 ...