上次实现了文件上传到本地磁盘并插入到了数据库 ,接下来就让我们将上传的资源实现下载的功能:
在显示所有文件的JSP中:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>文件下载页面</title>
</head>
<body>
<table>
<thead>
<tr>
<th>id</th><th>name</th><th>fileName</th><th>operator</th>
</tr>
</thead>
<tbody>
<c:forEach var="files" items="${list }">
<tr>
<td>
${files.id}
</td>
<td>
${files.name}
</td>
<td>
${files.fileName}
</td>
<td>
<a href="${pageContext.request.contextPath}/download.do?filePath=${files.filePath}&fileName=${files.fileName}">下载</a>
</td>
</tr>
</c:forEach>
</tbody>
</table>
</body>
</html>
实现浏览的servlet中:
package cn.csdn.web.servlet;
import java.io.IOException;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.csdn.web.dao.UploadDao;
import cn.csdn.web.dao.UploadDaoImpl;
import cn.csdn.web.domain.Upload;
public class ListFilesServlet extends HttpServlet {
UploadDao uDao = new UploadDaoImpl();
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
try {
List<Upload> list = uDao.checkAll();
List<Upload> entities = new ArrayList();
Map map = new HashMap();
for(Upload entity : list){
String fileName = entity.getFileName();
String realName = fileName.substring(fileName.lastIndexOf("_")+1);
entity.setFileName(realName);
System.out.println("-----"+entity.getFilePath());
entities.add(entity);
}
request.setAttribute("list", entities);
request.getRequestDispatcher("/listfiles.jsp").forward(request, response);
} catch (SQLException e) {
e.printStackTrace();
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}
下面是实现下载功能的servlet:
package cn.csdn.web.servlet;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DownLoadServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String filePath = request.getParameter("filePath");//拿到请求中的文件路径
String fileName = filePath.substring(filePath.lastIndexOf("_")+1);//得到文件的真实名字
filePath = new String(filePath.getBytes("iso8859-1"),"utf-8");
fileName = new String(fileName.getBytes("iso8859-1"),"utf-8");
fileName = URLEncoder.encode(fileName,"utf-8");
File file = new File(filePath);
if(!file.exists()){
request.setAttribute("message","要下载的文件不存在");
request.getRequestDispatcher("/message.jsp").forward(request, response);
}else{
response.setHeader("content-disposition", "attachment;filename="+fileName);
FileInputStream fis = new FileInputStream(file);
java.io.OutputStream os = response.getOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while((len=fis.read(buffer))!=-1){
os.write(buffer, 0, len);
}
fis.close();
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}
分享到:
相关推荐
JSch - Java实现的SFTP(文件上传详解篇)
JSch - Java实现的SFTP(文件上传/下载详解篇)
web项目真正的上传下载,先上传到服务端,然后在服务端下载已经上传的文件或数据
cisp-pte靶场通关思路分享----SQL注入篇 ...cisp-pte靶场通关思路分享----文件上传篇 cisp-pte靶场通关思路分享----远程文件包含篇 cisp-pte靶场通关思路分享----综合题篇 CISP-PTE知识体系大纲 PTE大纲
分享初衷:最近在做前后端分离项目,用到了文件上传下载功能,找了很多类似的案例,基本上都是相互转载,很少有原创的(总之找了很久没找到合适的),最后没有达到我想要的预期效果,故写此篇博客。 需求背景:以前在...
本篇文章主要介绍了JAVA SFTP文件上传、下载及批量下载实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
3.下载本文件后,您可以获得所有信息,不必再零散下载,给您带来很大的方便。 4.2个资源分,绝对物超所值。评论后,您就可以获得3个资源分,欢迎您评论! --------------------------------------------------------...
3.下载本文件后,您可以获得所有信息,不必再零散下载,给您带来很 大的方便。 4.0个资源分,绝对物超所值。评论后,您就可以获得1个资源分,欢迎 您评论! ----------------------------------------------------...
3.下载本文件后,您可以获得所有信息,不必再零散下载,给您带来很 大的方便。 4.3个资源分,绝对物超所值。评论后,您就可以获得4个资源分,欢迎 您评论! ----------------------------------------------------...
本套教程分为三部分 基础篇,提高篇,实战篇,由于CSDN上传文件限制,已经上传到百度云 基础篇-1 AT指令指导 基础篇-2 烧录和云升级 ****************************** 提高篇-1 虚拟机安装 提高篇-2 Linux环境搭建 ...
[上传下载]Ajax UpLoadFile 多个大文件上传控件 v1.15_ltajaxupfilecontrol.rar [上传下载]Asp.net + Flex实现网络硬盘_flex_up.rar [上传下载]ASP.NET同时上传多个文件_aspxcnup.rar [上传下载]ASPX多文件上传示例...
本套教程分为三部分 基础篇,提高篇,实战篇,由于CSDN上传文件限制,已经上传到百度云 基础篇-1 AT指令指导 基础篇-2 烧录和云升级 ****************************** 提高篇-1 虚拟机安装 提高篇-2 Linux环境搭建 ...
本套教程分为三部分 基础篇,提高篇,实战篇,由于CSDN上传文件限制,已经上传到百度云 基础篇-1 AT指令指导 基础篇-2 烧录和云升级 ****************************** 提高篇-1 虚拟机安装 提高篇-2 Linux环境搭建 ...
本套教程分为三部分 基础篇,提高篇,实战篇,由于CSDN上传文件限制,已经上传到百度云 基础篇-1 AT指令指导 基础篇-2 烧录和云升级 ****************************** 提高篇-1 虚拟机安装 提高篇-2 Linux环境搭建 ...