文档章节

关于 wcf rest 下载手机应用

RyanXing
 RyanXing
发布于 2016/03/30 15:18
字数 686
阅读 17
收藏 0

          下载的代码

        public Stream GetMobilePhoneApp()
        {
            strFilePath = "C://Users//XINGSQ//Pictures";
            string appFilePath = Path.Combine(strFilePath, "ICAM_DH_Android_bd_1.3.1.apk");
            FileStream appfs = new FileStream(appFilePath,FileMode.Open);
            System.Threading.Thread.Sleep(500);

            WebOperationContext.Current.OutgoingResponse.ContentType = "application/vnd.android.package-archive";        //.ipa     application/vnd.iphone
            WebOperationContext.Current.OutgoingResponse.Headers.Set("Content-Disposition","attachment;filename=ICAM_DH_Android_bd_1.3.1.apk");
            return appfs;
        }

其中最重要的是ContentType和Header的设置:

ContentType Http协议中表示后面的文档属于什么MIME类型。Servlet默认为text/plain,但通常需要显式地指定为text/html。由于经常要设置Content-Type,因此HttpServletResponse提供了一个专用的方法setContentType。

其中 apk(android应用)文件对应的是“application/vnd.android.package-archive”,ipa(IOS应用) 对应的是“application/vnd.iphone”

Content-disposition 是 MIME 协议的扩展,MIME 协议指示 MIME 用户代理如何显示附加的文件。Content-disposition其实可以控制用户请求所得的内容存为一个文件的时候提供一个默认的文件名,文件直接 在浏览器上显示或者在访问时弹出文件下载对话框。

格式说明:
content-disposition = "Content-Disposition" ":" disposition-type *( ";" disposition-parm )  

字段说明:
Content-Disposition为属性名
disposition-type是以什么方式下载,如attachment为以附件方式下载
disposition-parm为默认保存时的文件名
服务端向客户端游览器发送文件时,如果是浏览器支持的文件类型,一般会默认使用浏览器打开,比如txt、jpg等,会直接在浏览器中显示,如果需要提示用户保存,就要利用Content-Disposition进行一下处理,关键在于一定要加上attachment:   

Response.AppendHeader("Content-Disposition","attachment;filename=FileName.txt");

备注:这样浏览器会提示保存还是打开,即使选择打开,也会使用相关联的程序比如记事本打开,而不是IE直接打开了。
Content-Disposition就是当用户想把请求所得的内容存为一个文件的时候提供一个默认的文件名。具体的定义如下:

content-disposition = "Content-Disposition" ":"
disposition-type *( ";" disposition-parm )
disposition-type = "attachment" | disp-extension-token
disposition-parm = filename-parm | disp-extension-parm
filename-parm = "filename" "=" quoted-string
disp-extension-token = token
disp-extension-parm = token "=" ( token | quoted-string )

具体的例子如下:
Content-Disposition: attachment; filename="filename.xls"

当 然filename参数可以包含路径信息,但User-Agnet会忽略掉这些信息,只会把路径信息的最后一部分做为文件名。当你在响应类型为 application/octet- stream情况下使用了这个头信息的话,那就意味着你不想直接显示内容,而是弹出一个"文件下载"的对话框,接下来就是由你来决定"打开"还是"保存" 了。


注意事项:

       当代码里面使用Content-Disposition来确保浏览器弹出下载对话框的时候。 response.addHeader("Content-Disposition","attachment");一定要确保没有做过关于禁止浏览器缓存的操作。如下:

response.setHeader("Pragma", "No-cache"); 
response.setHeader("Cache-Control", "No-cache"); 
response.setDateHeader("Expires", 0);


© 著作权归作者所有

共有 人打赏支持
RyanXing
粉丝 0
博文 21
码字总数 6521
作品 0
东城
项目经理
私信 提问
5 步为 Windows Phone 7 手机创建 WCF REST 服务

Step 1: 创建 WCF 服务 在你的网站项目的 Services 文件夹中定义 IMyService 接口: 增加一个服务 MyService.svc 继承 IMyService 接口 Step 2: 修复 MyService.svc 标记 MyService.svc 标记...

红薯
2011/12/08
629
1
WCF技术的不同应用场景及其实现分析

历史背景: WCF,全称是Windows Communication Founcation,它作为微软新一代的通讯技术,首先正式出现在.NET Framework 3.0中,伴随着Windows Vista的发布而名噪一时。在此之前,曾经作为W...

墙头草
2011/06/21
0
0
关于.NET Core是否应该支持WCF Hosting的争论

本文要点 本文试图回答“.NET Core 是否应该支持 Windows 通信基础(WCF) Hosting?”的问题; 支持者论据:许多工程师喜欢把 WCF 作为一种编程模型,不希望因为迁移到 .NET Core 而产生(机...

dotNET跨平台
2018/09/11
0
0
本地事务和分布式事务工作实践

一:从事务的历史说起   知已知彼,百战不败。想了解事务,我们从事务的历史说起。   在Windows平台上,事务的概念最开始出现在关系型数据库中,但是随着.net平台的发展,事务包括的的范...

梵蒂冈考虑过
2016/08/11
22
0
《WCF全面解析》(上、下册)正式出版,即成为互动网销量排行榜首!!

“全书之写印,实系初稿。有时公私琐务猬集,每写一句,三搁其笔;有时兴会淋漓,走笔疾书,絮絮不休;有时意趣萧索,执笔木坐,草草而止。每写一段,自助覆阅,辄摇其首,觉有大不妥者,即贴...

长平狐
2012/09/04
41
0

没有更多内容

加载失败,请刷新页面

加载更多

Spark集群安装方式2

环境: jdk1.8、hadoop-2.7、spark-1.6、三台centos7(如下List-1所示) List-1 如下30上部署master;31上部署worker1;32上部署worker2 192.168.33.30 master192.168.33.31 worker1192.168.......

克虏伯
32分钟前
2
0
java File常用的方法

import java.io.File; public class a_22 { public static void main(String[] args) {File f= new File("D:\\tianya\\2019.3.14\\html");System.out.println(f.isDirectory());Syste......

南桥北木
39分钟前
2
0
equals()的重写规则

自反性。对于任何非null的引用值x,x.equals(x)应返回true。 对称性。对于任何非null的引用值x与y,当且仅当:y.equals(x)返回true时,x.equals(y)才返回true。 传递性。对于任何非null的引用...

无精疯
今天
2
0
Go基础系列:双层channel用法示例

双层通道的解释见Go的双层通道 以下是一个双层通道的使用示例。注意下面的示例中使用了"信号通道"(Signal channel),但这里的信号通道是多余的,仅仅只是为了介绍。 信号通道不用来传递数据,...

echojson
今天
2
0
PHP文件上传error的错误类型

PHP文件上传error的错误类型 - $_FILES['file']['error'] 有以下几种类型 1、UPLOAD_ERR_OK 其值为 0,没有错误发生,文件上传成功。 2、UPLOAD_ERR_INI_SIZE 其值为 1,上传的文件超过了 ph......

小良下山化了个缘
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部