转:http://ltc603.iteye.com/blog/25158
使用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的性能,尽量少用
注:
1、Servlet中输出流的简单处理方法:
//得到当前web应用根目录下test.txt文件的实际物理路径.
String path = getServletContext().getRealPath("/test.txt");
OutputStream os = response.getOutputStream();
InputStream is = new FileInputStream(path);
byte[] buff = new byte[1024];
int len;
while((len = is.read(buff)) != -1) {
os.write(buff, 0, len);
}
is.close();
os.close();
2、输出流跟PrintWriter out = response.getWriter();不能同时使用。
分享到:
相关推荐
TXT文件是一种纯文本格式,它只包含可打印的字符,易于阅读和编辑,通常用于存储文本信息,如文档、代码或日志。这种格式在各种操作系统和应用程序之间具有良好的兼容性。 相反,BIN文件是二进制文件,它包含了...
这个时候先别急着找后端,只要能下载生成想要的文件,文件打开内容是正确的都好说.下面总结几种生成导出的写法: 一. a标签点击下载 let blob = new Blob([res.data], {type: 'application/vnd.ms-excel'}); let link =...
标题“fs2you链接转到迅雷链接下载”所涉及的知识点主要集中在文件分享和下载管理上,这里我们将深入探讨fs2you与迅雷下载之间的转换机制,以及如何实现这一过程。 fs2you,全称Fileserve To You,是网络上常见的...
"图片转PCB文件"这个过程通常涉及到以下几个步骤: 1. 图像准备:首先,选择要转换的图片,最好是高清晰度、线条明显的黑白图像,因为它们能提供清晰的导线路径和元件轮廓。图像应具有良好的对比度,以便于识别电路...
这些转换需求背后通常涉及以下几个常见场景: 1. **兼容性需求**:不同的设备或软件可能支持的文件格式不同,为了确保文档能在多种环境下正确显示,需要进行格式转换。 2. **数据处理需求**:如将扫描的图片转换成...
在这个项目中,“asp.net实现Excel批量导入SQL Server、文件下载、转换为Html文件”涉及到的核心技术主要包括以下几个方面: 1. **Excel数据读取与操作**: - 使用 .NET Framework 提供的组件,如 `Microsoft....
- 百度文库提供了一个大型的文档分享社区,而FlashPaper更侧重于个人或小团队的文件转换需求。 - 百度文库的文档有时需要积分下载,而FlashPaper转换的SWF文件可以直接嵌入或分享。 5. **应用场景**: - 在线...
"从几百份课题申请书中总结出普遍存在的40个问题" 在课题申请书中,存在着许多普遍的问题,这些问题可能会影响课题的通过率。通过对几百份课题申请书的分析,我们总结出了40个普遍存在的问题,可以分为三个方面:...
在进行批量下载时,需要考虑到几个关键点: - 权限:确保你有足够的权限访问和下载所选文件。 - 文件大小:大量大文件可能会影响下载速度和网络带宽,所以要计划好下载时间。 - 版本控制:如果启用了版本控制,记得...
总结来说,这个"JSP下载文档"项目是一个实用的学习资源,它涵盖了以下几个关键知识点: 1. JSP基本结构和工作原理 2. Java I/O流用于文件读写 3. HttpServletResponse对象设置HTTP响应头 4. 文件下载逻辑的实现 5. ...
这通常涉及到以下几个步骤: 1. **创建网络请求**:在C#中,我们可以使用`HttpClient`类来发起HTTP请求,获取网络上的文件。`HttpClient`提供了异步方法,如`GetAsync()`,可以在后台线程中执行,避免阻塞UI线程。 ...
在安全性方面,使用PDF-Xchange转换文件有几个优点。PDF是一种静态格式,不容易被修改,这有助于保护文件内容免受未经授权的更改。此外,PDF-Xchange允许设置密码保护和权限控制,进一步增强了文件的安全性。用户...
在上述提及的几个网站中,提供了不同的PPT转换为PDF的软件下载链接,用户可以根据自己的需求和系统环境选择合适的版本。这些软件通常提供免费试用和付费版本,付费版本通常提供更高级的功能和服务。 总结来说,选择...
本文将围绕“大文件不能打开,打开慢解决的工具,几个G的sql文件秒打开”这一主题,深入探讨EmEditor这一高效文本编辑器,并介绍如何使用它来快速打开大型SQL文件。 EmEditor是一款强大的、专为处理大型文件设计的...
4. **完成转换**:保存文件后,会自动生成一个Word文档,包含了PPT的所有内容。 **小技巧**: - 在保存为Word文档时,如果希望每个幻灯片都单独成为一页,可以在Word文档中使用替换功能,将所有的换行符替换为分页...
总结来说,这个易语言项目提供了将OFFICE文档转换为PDF的解决方案,对于学习易语言以及需要处理文档转换问题的开发者来说,是一个有价值的参考资料。通过研究源码,不仅可以学习易语言的编程技巧,还能了解到Office...
基于Linux下载文件的功能设计与实现实用文档 本文档旨在设计和实现基于 Linux 的文件下载功能,旨在满足教学实验的需求。该设计主要包括系统总体方案设计、系统软件设计与实现、系统测试等几个方面。 一、课题研究...
总结,将CHM文件转换成HTML是一种常见的需求,尤其对于需要离线阅读或编辑帮助文档的场景。通过“CHM文件转换成HTML(绿色版)”这样的工具,我们可以轻松实现这一目标,同时理解其背后的原理和过程有助于我们更好地...
在选择“年度总结ppt模板免费下载”时,用户应关注以下几个方面: 1. **设计风格**:模板的设计风格应该符合公司的品牌形象,可以是简约、现代、专业或创意,确保与公司的视觉识别系统保持一致。 2. **内容结构**...