/**
该类使用方法:
在使用struts框架(或其他框架)时,如果从action转到该servlet,有一点要注意。就是在使action之前如果是用了filter,并且在filter调用了getWriter()方法,那么action跳转到该servlet时,必须是redirect形式,否则会出错。出错信息大致如下:
java.lang.IllegalStateException: getWriter() has already been called for this re
sponse。
该类的两个假设:
1。假使下载的文件名传送到该servlet的名字是“filename”。使用redirect到本servlet时,参数传送可以通过session;
2。假使要下载的文件在目录“rootpath”下。
**/
public class DownloadFile extends HttpServlet {
public String getValue(HttpServletRequest request, String name) {
String value = null;
value = request.getParameter(name);
if (value != null)
return value;
value = (String) request.getAttribute(name);
if (value != null)
return value;
value = (String) request.getSession().getAttribute(name);
request.getSession().removeAttribute(name);
return value;
}
public void doPost(HttpServletRequest request, HttpServletResponse response) {
FileInputStream fis = null;
ServletOutputStream fout = null;
try {
String filename = getValue(request, "filename");
if (filename != null) {
String oldcharset = request.getCharacterEncoding();
String showFilename = null;
if (oldcharset != null) {
showFilename = new String(filename.getBytes(request
.getCharacterEncoding()), "ISO_8859_1");
} else {
showFilename = new String(filename.getBytes(), "ISO_8859_1");
}
String rootpath = getValue(request, "rootpath"); if (rootpath == null) {
rootpath = getServletContext().getRealPath("/");
}
String filepath = rootpath + filename;
response.reset();
response.setHeader("Pragma", "No-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("application/octet-stream;charset=GBK");
response.setHeader("Content-disposition",
"attachment;filename=\"" + showFilename + "\"");
fis = new FileInputStream(filepath);
fout = response.getOutputStream();
int byteRead;
while ((byteRead = fis.read()) != -1) {
fout.write(byteRead);
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
}
}
if (fout != null) {
try {
fout.close();
} catch (IOException e) {
}
}
}
}
public void doGet(HttpServletRequest request, HttpServletResponse response) {
doPost(request, response);
}
}
分享到:
相关推荐
Java实现文件下载功能,以WORD文档方式展现给用户看。
Java实现文件下载,直接复制使用。代码清晰。
用ajax实现的java文件打包下载。可以输入扩展名选择文件下载。
JAVA代码,通过文件名及文件路径实现本地文件下载。
Java实现文件下载并解决中文文件名乱码
java实现文件下载,并弹出保存对话框(Excel)
用Java来实现文件下载的功能,里面包括了Java实现的源代码,希望能帮助大家
用java代码实现文件下载的使用例子,实用简洁。
Java文件下载的几种方式,供大家参考!!!
java使用itext实现pdf文件下载小案例,通过系统路径下载,和通过浏览器下载
2022年用Java实现HTTP文件队列下载Java教程.docx
主要为大家详细介绍了java实现文件下载的两种方式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
在java代码中实现文件的上传和下载,通过页面的file文件上传到java代码段,获取文件的大小和名字
用JAVA语言实现的文件浏览器,类似于资源管理器的功能;
主要为大家详细介绍了java利用oss实现下载功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
java 实现 word 文档的在线预览,资源包含代码和jar包,下载放入项目既可以使用
Java实现HTTP文件下载
经典的java文件上传下载实例。 通过阅读详细的注释,可以比较容易地理解java文件上传和下载的原理和一般的做法。