简介:

实现数据实时刷新:SignalR

后台服务:.NET/WebAPI

为了减轻web的压力,将接口中接收数据的方法写到SignalR的Hub中

在此放一小段代码给自己加深下印象,博主有点健忘......

/// <summary>
/// 向客户端发送照片上传的结果
/// </summary>
/// <param name="imageInfo">JSON字符串</param>
public void HhtUpCarInfo(string imageInfo)
{
//var声明一个变量,接收Base64StringToFile() 的返回值

var uploadImageResult = Base64StringToFile(imageInfo);

//然后通过Clients.All.Base64StringToFile(uploadImageResult)将结果返回给移动端
Clients.All.Base64StringToFile(uploadImageResult);
}

/// <summary>
/// 上传照片
/// </summary>
/// <param name="imageInfo"></param>
/// <returns>图片的相对路径</returns>
public string Base64StringToFile(string imageInfo)
{

//通过多次实验发现SignalR中只能接收安卓上传的字符串格式,所以在这里调用了博主自己的类库中一个将JSON转换成对象的方法来接收参数
CarInfoImageDto carInfoImage = JsonHelper.DeserializeByNewton<CarInfoImageDto>(imageInfo);

//调用博主自己的类库中将Base64String转换成图片的方法
return DecodeBase64.Base64StringToFile(carInfoImage.Base64String, carInfoImage.FileType);
}

/// <summary>
/// 将JSON字符串转换为C#对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="json"></param>
/// <returns></returns>
public static T DeserializeByNewton<T>(string json)
{
return JsonConvert.DeserializeObject<T>(json);
}

/// <summary>
/// 上传图片信息
/// </summary>
/// <param name="base64String">Base64字符串</param>
/// <param name="fileType">文件类型</param>
/// <returns>如果保存成功,会返回文件的相对路径;否则返回空值</returns>
public static string Base64StringToFile(string base64String, string fileType)
{
string virtualPath = string.Format("/File/{0:yyyyMMddhhmmss}.{1}", DateTime.Now, fileType);
string physicalPath = HttpContext.Current.Server.MapPath(virtualPath);
if (!string.IsNullOrEmpty(base64String) && !File.Exists(physicalPath))
{
byte[] imageBytes = Convert.FromBase64String(base64String);
MemoryStream memoryStream = new MemoryStream(imageBytes, 0, imageBytes.Length);
memoryStream.Write(imageBytes, 0, imageBytes.Length);
Image image = Image.FromStream(memoryStream);
image.Save(physicalPath);
return virtualPath;
}
return "上传失败";
}

在上面的代码示例中可以深入了解SignalR与客户端数据的传输特点以及交互的实现。

关于SignalR实现页面实时刷新的的功能可以去看一下博主SignalR分类下的文章,你会对SignalR有一个更深刻的认识。

在Signalr的Hub中写方法实现与安卓的数据交互的更多相关文章

  1. 使用bs4中的方法爬取星巴克数据

    import urllib.request # 请求url url = 'https://www.starbucks.com.cn/menu/' # 模拟浏览器发出请求 response = urll ...

  2. SpringMVC入门(二)—— 参数的传递、Controller方法返回值、json数据交互、异常处理、图片上传、拦截器

    一.参数的传递 1.简单的参数传递 /* @RequestParam用法:入参名字与方法名参数名不一致时使用{ * value:传入的参数名,required:是否必填,defaultValue:默认 ...

  3. Silverlight中如何自己写方法将DataTable转换为PagedCollectionView数据(动态创建类)

    将DataTable转换为PagedCollectionView数据,我们可以借用DataTable的GetBindableData()方法,如下: DataTable dt=new DataTabl ...

  4. JS-对象中写方法

  5. aspx 页面中 js 引用与页面后台的数据交互 --【 后台调用 js 】

    js 中调用后台方法   一.用Response.Write方法 Response.Write("<script type='text/javascript'>alert(&qu ...

  6. aspx 页面中 js 引用与页面后台的数据交互 --【 js 调后台】

    后台调用 js 方法 前台调用后台方法与变量:  后台被调用的方法必须是public 或 protected 后台被调用的方法必须是静态的static 方法一:通过WebService来实现 步骤: ...

  7. 使用AIDL远程调用服务中的方法

    AIDL:android interface define language(接口定义语言) 作用:方便远程调用其他服务中的方法 注意:安卓四大组件都要在清单文件注册 aidl创建图: AIDL的全称 ...

  8. 五、React事件方法(自写一个方法(函数),然后用按钮onClick触发它、自写方法改变this指向3种写法、

    上接:https://www.cnblogs.com/chenxi188/p/11782349.html 项目目录: my-app/ README.md node_modules/ package.j ...

  9. 分享两个模拟get和post方法的工具类,让应用能够与服务器进行数据交互

    很久没有码字了,今天跟大家分享一个模拟get和post方法的工具类,在安卓应用中很多都需要跟服务器进行数据交互,这需要两方面的配合,首先服务器端会给应用提供一些数据交互的接口,可是怎样在应用中去调用呢 ...

随机推荐

  1. http之head请求(转)

    HTTP请求方法并不是只有GET和POST,只是最常用的.据RFC2616标准(现行的HTTP/1.1)得知,通常有以下8种方法:OPTIONS.GET.HEAD.POST.PUT.DELETE.TR ...

  2. WinMerge文件编码设置

    http://blog.sina.com.cn/s/blog_7575fab10101o0na.html 系统默认是System codepage,我们要选用Custom codepage.值得注意的 ...

  3. Bootstrap入门(十三)组件7:导航条

    Bootstrap入门(十三)组件7:导航条 1.默认样式的导航条 2.嵌入表单和按钮 3.嵌入文本和非导航的链接 4.组件排列和下拉菜单 5.固定在顶部/底部 6.反色的导航条 7.路径导航 首先先 ...

  4. 一步一步学Java IO

    1.基本概念 1.1.InputStream 最基本的字节输入流,抽象类,定义了读取原始字节的所有基本方法1.1.1.public abstract int read() throws IOExcep ...

  5. 如何在项目中引入MetaQ消息收发机制

    当需要异步发送和接收大量消息时,需要在Crystal项目中引入MetaQ消息收发机制. 关于MetaQ使用的官方例子可参考:https://github.com/killme2008/Metamorp ...

  6. Android内存泄露---检测工具篇

    内存使用是程序开发无法回避的一个问题.如果我们毫不在意肆意使用,总有一天会为此还账,且痛不欲生...所以应当防患于未然,把内存使用细化到平时的每一行代码中. 内存使用概念较大,本篇先讲对已有app如何 ...

  7. Android笔记:Fragment与ViewPager组合时,如何在FragmentActicity获取Fragment对象

    项目中有一处需要监听宿主的控件,再去更新Fragment页面,由此必须去获取Fragment里的对象; 在FragmentActivity + Fragment组合里是可以使用以下方案: MedicF ...

  8. mac下为gdb创建证书赋权其调试其它应用

    1 使用/Applications/Utilities/Keychain Access.app创建证书 钥匙串访问->证书助理->创建证书 给证书随笔取一个名字,身份类型"自签名 ...

  9. BZOJ两水题连发~(BZOJ1854&&BZOJ1191)

    前言:两题都是省选题不过水的惊人,且都可以用二分图最大匹配做哎--- 1854: [Scoi2010]游戏 Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: ...

  10. Python系列之Collections内置模块(1)

    collections 是 python 的内置模块,源码位于 Lib/collections/__init__.py ,该模块提供了通用的数据容器. deque 容器对象 通过 from colle ...