博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Restful风格wcf调用3——Stream
阅读量:6569 次
发布时间:2019-06-24

本文共 4499 字,大约阅读时间需要 14 分钟。

写在前面

上篇文章介绍了restful接口的增删改查,本篇文章将介绍,如何通过数据流进行文件的上传及下载操作。

系列文章

一个例子

添加一个wcf服务,并在global.asax中注册路由,并修改svc文件的标记,添加Factory属性。

//注册路由            System.Web.Routing.RouteTable.Routes.Add(new System.ServiceModel.Activation.ServiceRoute(                "imageService", new System.ServiceModel.Activation.WebServiceHostFactory(), typeof(ImageService)));
<%@ ServiceHost Language="C#" Debug="true" Service="Wolfy.WCFRestfuleDemo.ImageService" CodeBehind="ImageService.svc.cs"  Factory="System.ServiceModel.Activation.WebServiceHostFactory" %>

契约

namespace Wolfy.WCFRestfuleDemo{    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IImageService" in both code and config file together.    [ServiceContract]    public interface IImageService    {        ///         /// 根据图片的相对路径获取文件流        ///         ///         /// 
[OperationContract] [WebGet(UriTemplate = "api/{imagUrl}")] Stream GetImageStream(string imgUrl); /// /// 上传图片 /// /// /// [OperationContract] [WebInvoke(UriTemplate = "api/{imageName}", Method = "POST")] void UploadImage(Stream imgStream, string imageName); /// /// 获得所有图片的相对路径 /// ///
[OperationContract] [WebGet(UriTemplate = "api/list", ResponseFormat = WebMessageFormat.Xml)] string[] GetImages(); }}

实现

using System;using System.Collections.Generic;using System.Drawing;using System.IO;using System.Linq;using System.Runtime.Serialization;using System.ServiceModel;using System.ServiceModel.Web;using System.Text;namespace Wolfy.WCFRestfuleDemo{    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "ImageService" in code, svc and config file together.    // NOTE: In order to launch WCF Test Client for testing this service, please select ImageService.svc or ImageService.svc.cs at the Solution Explorer and start debugging.    public class ImageService : IImageService    {        ///         /// 根据图片的相对路径获取文件流        ///         ///         /// 
public System.IO.Stream GetImageStream(string imgUrl) { var contentType = Path.GetExtension(imgUrl).Trim('.'); WebOperationContext woc = WebOperationContext.Current; //根据请求的图片类型,动态设置contenttype woc.OutgoingResponse.ContentType = "image/" + contentType; string savePath = System.Web.HttpContext.Current.Server.MapPath("/Images"); string filePath = Path.Combine(savePath, imgUrl); return File.OpenRead(filePath); } /// /// 上传图片 /// /// /// public void UploadImage(System.IO.Stream imgStream, string imageName) { var dir = System.Web.HttpContext.Current.Server.MapPath("~/Images"); var file = Path.Combine(dir, imageName); var bitmap = Bitmap.FromStream(imgStream); bitmap.Save(file); } /// /// 获得所有图片的相对路径 /// ///
public string[] GetImages() { List
lstImages = new List
(); var dir = System.Web.HttpContext.Current.Server.MapPath("~/Images"); string[] paths = Directory.GetFiles(dir); for (int i = 0; i < paths.Length; i++) { lstImages.Add(paths[i].Replace(dir, "")); } return lstImages.ToArray(); } }}

首先,进行上传文件1.jpg

try            {                var httpClient = new HttpClient();                var strPostUrl = "http://localhost:21074/imageService/api/{0}";                string fileName = Path.GetFileName("1.jpg");                FileStream fs = new FileStream("1.jpg", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);                HttpResponseMessage response = httpClient.Post(string.Format(strPostUrl, fileName), HttpContent.Create(fs));                fs.Dispose();                Console.WriteLine("上传成功");            }            catch (Exception)            {                                throw;            }

客户端提示

查看Images目录,1.jpg已经上传成功。

通过restful服务在浏览器中查看:在浏览器中发送get请求,将会调用GetImageStream方法,将stream响应给浏览器,浏览器进行渲染。

还剩最后一个接口测试,返回所有的图片。因为wcf寄宿的也是一个web站点,所以也可以通过在浏览器中直接调用,将会返回所有的图片的相对路径的xml信息并在页面上进行展示。

总结

本文介绍了restful接口如何处理post过来的stream,以及如何返回stream给客户端的方式,这里也是一种上传下载文件的一种方式。

参考资料

http://blog.csdn.net/fangxing80/article/details/6261431

转载于:https://www.cnblogs.com/wolf-sun/p/4557057.html

你可能感兴趣的文章
Lync2013 恢复-整残之后如何重新安装
查看>>
SSO 单点登录会话管理
查看>>
jpa查询记录重复
查看>>
mysql-事物实现原理
查看>>
上下滚动播报特效
查看>>
iOS 隐藏导航栏整个视图上移闪屏问题
查看>>
12cR2 RAC+RAC+ADG ORA-16854
查看>>
数组名和数组名取地址的区别
查看>>
某企业WSUS服务实例介绍
查看>>
准IT工作者如何择师、如何学习
查看>>
redis主从复制故障转移
查看>>
2011,我的IT我的梦
查看>>
KVM虚拟化实践(一)
查看>>
First Unique Character in a String(leetcode387)
查看>>
计算机体系架构简析
查看>>
另类无法在ESXi上添加存储器故障
查看>>
select 下拉菜单Option对象使用add(elements,index)方法动态添加
查看>>
tomcat及负载均衡
查看>>
Linux磁盘管理(实验)
查看>>
【XXX贷】2014年10月XX日发标预告
查看>>