使用servlet来下载文件,其原理非常简单,只要得到文件的输入流(或相应字节),然后写输出流即可。现就其中的几个细节问题展开:
1. MIME类型的设置:
Web 浏览器使用 MIME 类型来识别非 HTML 文档,并决定如何显示该文档内的数据。
例如EXCEL文件的 MIME 类型是 "application/vnd.ms-excel "。要用servlet 来打开一个 EXCEL 文档,需要将 response 对象中 header 的 contentType 设置成“application/vnd.ms-excel ”。
response.setContentType(contentType);
2. Content disposition
HTTP response header中的content-disposition 允许 servlet 指定文档表示的信息。使用这种header ,你就可以将文档指定成单独打开(而不是在浏览器中打开),还可以根据用户的操作来显示。
如果用户要保存文档,你还可以为该文档建议一个文件名。这个建议名称会出现在 Save As 对话框的“文件名”栏中。如果没有指定,则对话框中就会出现 servlet 的名字。
servlet 中,将 header 设置成下面这样:
response.setHeader("Content-disposition","attachment;filename="+ "Example.xls" );
response.setHeader("Content-Disposition", "inline; filename="fliename)
点击打开会在ie中打开。
需要说明的有三点:
Ø 中文文件名需要进行iso8859-1转码方可正确显示:
fileName = new String(fileName.getBytes("GBK"),"iso8859-1");
Ø 传递的文件名,需要包含后缀名(如果此文件有后缀名),否则丢失文件的属性,而不能自行选择相关程序打开。
Ø 有下载前询问(是打开文件还是保存到计算机)和通过IE浏览器直接选择相关应用程序插件打开两种方式,前者如上代码所示,后者如下:
response.setHeader("Content-disposition","filename="+ "Example.xls" );
3. 在研究文件的上传及下载过程中,有几点体会
程序的I/O操作往往是性能的瓶颈所在,java io定义了两个基本的抽象类:InputStream和OutputStream,对于不同的数据类型比如磁盘,网络又提供了不同的实现,java.io也提供了一些缓冲流(BufferedStream),使硬盘可以很快的读写一大块的数据, 而Java基本的I/O类一次只能读写一个字节,但缓冲流(BufferedStream)可以一次读写一批数据,,缓冲流(Buffered Stream)大大提高了I/O的性能。所以:
Ø小块小块的读写数据会非常慢,因此,尽量大块的读写数据
Ø使用BufferedInputStream和BufferedOutputStream来批处理数据以提高性能
Ø对象的序列化(serialization)非常影响I/O的性能,尽量少用
分享到:
相关推荐
这个时候先别急着找后端,只要能下载生成想要的文件,文件打开内容是正确的都好说.下面总结几种生成导出的写法: 一. a标签点击下载 let blob = new Blob([res.data], {type: 'application/vnd.ms-excel'}); let link =...
Java中File类对文件的几个常见操作实例总结
jsp开发所需要的几个tld文件,汇总了一下,留待备用
C++的各种文件读写操作总结,点到即可,可以举一反三
linux命令行,day5几个配置文件和远程telnet,详细笔记文档总结
为Unix/Linux 系统设计一个简单的二级文件系统。要求做到以下几点: (1) 可以实现下列几条命令: login 用户登录 logout 拥护注销 Create 新建文件 Delete 删除文件 Open 打开文件 Clos 关闭文件 Read 读文件 ...
于是我把windows搭建redis集群所需要的文件都汇总了一下给大家下载。有个小技巧,官网上下不动的东西,点开链接审查元素,将链接复制下来到迅雷下载一般就可以很快下载啦 包括下列文件:redis-4.0.0.gem redis-trib....
关于blackberry资源文件如何换的几个关键点。
上次上传了一个PDF的文件,虽然蛮详细的。但是后来又找了一些资料,自己总结了一下,拿出来跟大家分享。感谢那些以前的几个作者
socket文件传输几个源码汇总及一些其他关于socket文件传输资料可以下载看看
本文件包含一份个人总结的安装注意事项和三个版本的Mac ISO文件链接(要使用迅雷下载),可以满足广大用户以虚拟机的形式体验和开发mac、ios应用的欲望;以上10.07 10.08亲测可用,10.10安装了一天卡着不动就放弃了...
解释了Microsoft Visual Studio 2010/Microsoft SQL Server 2012的帮助文件(使用Microsoft Help Viewer 1.0或1.1管理)在数据文件迁移时应该注意的问题,内容可能又长又臭,不必关心分析过程的童鞋们,可以直接跳到...
操作系统课程设计-模拟一个简单二级文件管理系统
平时工作中遇到很多用相同的EXCEL模板格式报上来的数据,但汇总时遇到了问题。因此编写了这个应用程序。安装后即可使用。 原本有个完整的安装包的,但因上传权限不够只能将应用程序安装包上传这里。程序需要DOT ...
最近参加Altuim Designer Summer 09培训,其中有几个技巧还真是不错,能加快产品设计的进度,认为这些资料好的的朋友帮我顶起来,有其它更好的技巧共享出来! AD6教程01.rar 中含3个文件 如何将你的设计关联到ERP...
这是我在公司实习的时候研究的课题,主要将大量数据从数据库导出到Excel文件。(一般是值Excel2007及以后版本)因为...我主要采用了JXLS和POI的第三方jar包,这是一个文档总结。如果要下载程序,可以去我的下载空间。
4.5.1几个常识性问题 57 4.5.2技术来源 57 4.5.3硬盘修复需要理解的基本概念 58 4.6数据备份介绍 60 第五章 NTFS相关领域技术介绍 61 5.1 RH8下最简单编译NTFS模块的方法 61 5.2 UBUNTU下安全读写NTFS分区格式...
查找了一些资料,总结了一下,发布一个最小版的Java程序,大概用到下面几个工具。 Step1:将程序打包成一个.jar文件,如果项目中包含了外部的jar文件,则可以利用工具fat-jar来打包。 Step2:得到瘦身的jre,这个...