可以实现文件下载的方式有各种各样的,可以直接在浏览器打开,也可以作为附件进行下载,这里面的最主要的部分其实就是对HTTP响应头content-disposition的控制。服务器设置响应头,告诉浏览器该以何种的方式(attachment或者inline)以及何种内容类型(response.setContentType("..."))打开文件。
1)显示可以下载文件列表Servlet
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
List<String> fileList = getFileName("F:\\downloadtest");//指定文件存放位置
request.setAttribute("lists", fileList);//设置到request中
request.getRequestDispatcher("list.jsp").forward(request, response);//将请求转发
}
/**
* 列出path路径下可以下载的文件名
* @param path
* @return
*/
public static List<String> getFileName(String path){
List<String> fileNames =new ArrayList<String>();
File source = new File(path);
if(source.isDirectory()&&source.exists()){//判断是否存在以及是否是一个目录
File[] files = source.listFiles();
for(File file:files){
fileNames.add(file.getName());//获得文件目录
}
}
return fileNames;
}
2)list.jsp界面代码,用来显示可以现在的文件名
<body>
<%
List<String> fileNames =(List<String>) request.getAttribute("lists");
for(String name:fileNames){
%>
[url=DownloadServlet?filename=<%=name %>]<%=name%>[/url]<br/><!--传递参数filename-->
<%
}
%>
</body>
3)DownloadServlet实现文件的下载
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("GB2312");
String serverPath = "F:\\downloadtest";
String fileName = new String(request.getParameter("filename").getBytes(
"ISO-8859-1"), "GB2312");//get提交的方式去乱码
String fullPath = serverPath + "\\" + fileName;
System.out.println(fullPath);
File file = new File(fullPath);
//设置相应头,
//attachment是以附件的方式下载,并且文件名为filename后面的字符串的值
response.setHeader("content-disposition", "attachment;filename="
+ new String(fileName.getBytes("GB2312"), "ISO-8859-1"));//去除文件下载时显示名称乱码
InputStream in = null;
OutputStream output = null;
try {
in = new FileInputStream(file);
int length = 0;
byte buffer[] = new byte[1024];
output = response.getOutputStream();
while ((length = in.read(buffer)) != -1) {// 如果使用in.read()方法,仅仅可以下载到文件,而不能得到文件的内容
output.write(buffer, 0, length);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
in.close();
output.close();
}
}
在此Servlet中,主要的实现也是依靠对文件的IO操作,其中response.getOutputStream返回的实际类型为ServletOutputStream,它是OutputStream的一个子类,API中说道“Provides an output stream for sending binary data to the client.”
以上的这种方式,是告诉浏览器以附件的方式打开此文件,另外还有一种就是在线的方式打开文件
//可以设置为浏览器直接打开,不使用附件的方式下载;
response.setHeader("content-disposition", "inline;filename="+ new String(fileName.getBytes("GB2312"), "ISO-8859-1"));
经过测试,如果使用浏览器直接打开的话,是可以正常显示文件中的内容的(特殊文件除外,如word等,txt、jpeg等文件可以直接打开),而且office2003以上版本就会提示以压缩文件的方式进行打开。
这点谜团有待解开,有知道的朋友可以告知一下谢谢
分享到:
相关推荐
本文介绍如何不借助第三方框架实现iOS开发中得文件上传。 由于过程较为复杂,因此本文只贴出部分关键代码。 主控制器的关键代码: 代码如下: YYViewController.m #import “YYViewController.h” #define ...
分享初衷:最近在做前后端分离项目,用到了文件上传下载功能,找了很多类似的案例,基本上都是相互转载,很少有原创的(总之找了很久没找到合适的),最后没有达到我想要的预期效果,故写此篇博客。 需求背景:以前在...
模拟文件系统的设计与实现 本次实验要求学生编程模拟实现操作系统的文件管理系统的如下基本功能: 1、实现文件的创建、查询、删除、修改、更名、拷贝等基本功能; 2、文件系统采用多级目录机制,实现目录的创建、...
本来是打算用新的类...突然就想到了要做一个简单的客户端实现其基本的功能,于是在闲暇时就慢慢的把功能给加上去了,虽然有点简陋但是还是实现了有不少的功能,当然也包括了前面提到上传下载带中文的文件乱码问题。
这是用C语言对于linux下面简单的文件系统的实现,实现了二级目录即不同用户共存和一些基本的创建之类的功能。
下载文件的基本原理 Java中的文件下载是通过输入输出流实现的,将远程服务器的文件读取到本地,从而实现文件的下载。 Java进行文件下载的方法 Java中可以使用HttpURLConnection或者Apache HttpClient等工具类进行...
编程实现学生基本信息管理程序。学生基本信息包括:学号、姓名、性别、年龄、班级、学院、专业等。具体实现的管理功能如下: (1) 输入并显示多个学生的基本信息; (2) 可根据需要实现学生信息的添加; (3) ...
C#实现对XML文件的基本操作
该附件可以直接下载使用,体现文件上传进度条实现的基本技术以及原理
编程实现学生基本信息管理程序。学生基本信息包括:学号、姓名、性别、年龄、班级、学院、专业等。具体实现的管理功能如下: (1) 输入并显示多个学生的基本信息; (2) 可根据需要实现学生信息的添加; (3) ...
基本的文件上传jsp的实现方法!!通过简单的代码就能实现该功能!!
2、 设计并实现面向连接的Socket文件下载服务器程序,至少能够响应浏览文件列表和下载指定文件的请求。 3、 设计并实现面向连接的Socket文件下载客户端程序,至少能够向指定服务器发出浏览文件列表和下载指定文件的...
实现对文件的基本操作,添加\读写\删除\.可运行,好用. 原为操作系统课程设计!
支持多任务下载,经测试基本可实现多任务下载功能.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
ftp的文件下载(qt4平台C语言编写),与xp下使用的ftp下载差不多,界面没xp下好看,基本实现了文件的下载和上传
实验内容: 利用哈夫曼编码思想,设计对一个文本文件(.txt)中的字符进行哈夫曼...(1)压缩:实现对文件的压缩,生成一个比原文件小的压缩文件。 (2)解压:能够对已经压缩的这个文件进行解压,完全恢复成原来的文件。
整个系统历时9个月,因为都是学生嘛,加上做学校用得系统,不断地调研,分析需求,所以做的比较慢,一直上线测试,然后就调式改BUG,最后系统能基本实现学校的要求,文件上传下载这个模块功能也是很好地实现,我将...
实现基本的文件上传下载功能,可以上传多个文件,宿儒要下载的文件名可以下载该文件,可以作为上传下载的参考例子
c#编写的资源管理器,实现了基本的功能,可以浏览电脑文件,复制,粘贴,删除
该项目能实现基本的断点续传下载文件功能(暂停、继续、删除),以及下载前网路状态监听(WiFi、流量状态、断网状态),断网重启继续下载,下载速度显示,MD5校验等.rar,太多无法一一验证是否可用,程序如果跑不起来...