这篇文章中您将了解到以下内容

保存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 -图片处理的更多相关文章

  1. 【Xamarin挖墙脚系列:Mono项目的图标为啥叫Mono】

    因为发起人大Boss :Miguel de lcaza 是西班牙人,喜欢猴子.................就跟Hadoop的创始人的闺女喜欢大象一样...................... 历 ...

  2. Mono for Android (4)-- 图片转为二进制,二进制转回图片

    最近纠结蓝牙打印的问题,想着图片先转为二进制发给打印机,找了好多资料,终于成功了,贴出来共享一下 先是图片转换为二进制的: Bitmap bitmap = BitmapFactory.DecodeRe ...

  3. Mono for Android 显示远程图片

    Main.axml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:an ...

  4. mono for android 读取网络远程图片

    布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=& ...

  5. Mono自定义图片按钮

    首先,我们编写一个MyImageButton类,继承自LinearLayout public class MyPhoneImageButton:LinearLayout { private Image ...

  6. mono for android 获取手机照片或拍照并裁剪保存

    axml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android ...

  7. mono for android学习过程系列教程(1)

    直接进入主题,关于mono for android的学习,首先配置好环境,如何配置环境,度娘谷歌一大堆,记得使用破解版. 我自己是百度“黑马四期”传智播客的视频,里面有破解版开发环境的软件. 今天直接 ...

  8. mono for android学习过程系列教程(2)

    接着上一讲继续开始写,今天介绍的是安卓的基本组成结构. 在大多数情况下,MONO FOR ANDROID的命名空间和Android的命名空间 是互相映射的.有时候需要大小写,非字母数字字符的用法以及名 ...

  9. CentOS上 Mono 3.2.8运行ASP.NET MVC4经验

    周一到周三,折腾了两天半的时间,经历几次周折,在小蝶惊鸿的鼎力帮助下,终于在Mono 3.2.8上运行成功MVC4.在此总结经验如下: 系统平台的版本: CentOS 6.5 Mono 3.2.8 J ...

随机推荐

  1. 一步步开发自己的博客 .NET版(11、Web.config文件的读取和修改)

    Web.config的读取 对于Web.config的读取大家都很属性了.平时我们用得比较多的就是appSettings节点下配置.如: 我们对应的代码是: = ConfigurationManage ...

  2. 07. Web大前端时代之:HTML5+CSS3入门系列~H5 地理位置

    Web大前端时代之:HTML5+CSS3入门系列:http://www.cnblogs.com/dunitian/p/5121725.html 源码:https://github.com/duniti ...

  3. .NET Core的文件系统[5]:扩展文件系统构建一个简易版“云盘”

    FileProvider构建了一个抽象文件系统,作为它的两个具体实现,PhysicalFileProvider和EmbeddedFileProvider则分别为我们构建了一个物理文件系统和程序集内嵌文 ...

  4. node-sass 安装失败的解决措施

    在测试gulp-webapp的时候遇到了styles不能被正常编译的问题,究其原因是node-sass没有被正常安装. 根本原因是国内网络的原因. 最终的解决方法是通过淘宝的npm镜像安装node-s ...

  5. 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之集群概念介绍(一)

    集群概念介绍(一)) 白宁超 2015年7月16日 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习 ...

  6. ,net core mvc 文件上传

    工作用到文件上传的功能,在这个分享下 ~~ Controller: public class PictureController : Controller { private IHostingEnvi ...

  7. 访问者模式(visitorpattern)

    /** * 访问者模式 * @author TMAC-J * 在客户端和元素之间添加一个访问者 * 当你需要添加一些和元素关系不大的需求时,可以直接放在访问者里面 * 或者是元素之间有一些公共的代码块 ...

  8. java springMVC SSM 操作日志 4级别联动 文件管理 头像编辑 shiro redis

    A 调用摄像头拍照,自定义裁剪编辑头像 B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,开发利器)+快速构建表单;  技术:313596790freemaker模版技术 ,0个代码不用写 ...

  9. Git 学习看这篇就够了!

    Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理. 可能新手会问"git和github有什么关系啊?" git是一个版本控制工具: githu ...

  10. Atitit.你这些项目不都是模板吗?不是原创  集成和整合的方式大总结

    Atitit.你这些项目不都是模板吗?不是原创  集成和整合的方式大总结 1.1. 乔布斯的名言:创新即整合(Creativity is just connecting things).1 1.2. ...