Jsp+Servlet实现文件上传下载(四)--下载文件
接着上一篇讲:
Jsp+Servlet实现文件上传下载(三)--删除上传文件 点击打开链接
本章来实现一下下载文件功能,同时优化了一下上一章中的代码。
废话少说,上代码
--------------------------------------------------------分割线---------------------------------------------------------------------------------
调整列表页面list.jsp,增加下载链接
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>上传文件列表</title>
</head>
<body>
<h3>文件列表</h3>
<table class="acclist_tab" border="1" bordercolor="#000000" cellspacing="0" cellpadding="2" style="border-collapse:collapse;">
<tr>
<th>文件名</th>
<th>文件大小(KB)</th>
<th>操作</th>
</tr>
<c:if test="${not empty accessoryList}">
<c:forEach items="${accessoryList}" var="acc">
<tr>
<td>${acc.fileName}</td>
<td>${acc.fileSize}</td>
<td>
<a href="<%=request.getContextPath()%>/removeUploadedFile?id=${acc.id}">删除</a>
<a href="<%=request.getContextPath()%>/downloadUploadedFile?id=${acc.id}">下载</a>
</td>
</tr>
</c:forEach>
</c:if>
</table>
</body>
</html>
新增下载文件控制器:DownloadUploadedFileServlet
package servlet.upload;
import dao.upload.AccessoryDao;
import entity.upload.EntityAccessory;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.URLEncoder;
/**
* 下载文件控制器
*
* @author xusucheng
* @create 2017-12-30
**/
@WebServlet("/downloadUploadedFile")
public class DownloadUploadedFileServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//拿到文件ID
int fileId = Integer.valueOf(request.getParameter("id"));
EntityAccessory entity = AccessoryDao.load(fileId);
String filePath = entity.getFilePath();
String fileName = entity.getFileName();
String errorMessage = "";
//判断文件是否存在
File file = new File(filePath);
if (file.exists()) {
//设置响应头
response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
//创建文件输入流
FileInputStream is = new FileInputStream(filePath);
//创建输出流
OutputStream os = response.getOutputStream();
//创建缓冲区
byte buffer[] = new byte[1024];
int len = 0;
//写数据到浏览器
while ((len = is.read(buffer)) > 0) {
os.write(buffer, 0, len);
}
//关闭流
is.close();
os.close();
} else {
errorMessage = "下载失败,文件:" + filePath + " 不存在";
request.setAttribute("errorMessage", errorMessage);
request.getRequestDispatcher("pages/upload/error.jsp").forward(request, response);
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
}
优化了上一章servlet类名,调整为大写开头了
项目结构图
测试效果截图
下载失败提示:
下集预告
敬请期待。
Jsp+Servlet实现文件上传下载(四)--下载文件的更多相关文章
- HTTP文件上传服务器-支持超大文件HTTP断点续传的实现办法
最近由于笔者所在的研发集团产品需要,需要支持高性能的大文件http上传,并且要求支持http断点续传.笔者在以前的博客如何实现支持大文件的高性能HTTP文件上传服务器已经介绍了实现大文件上传的一些基本 ...
- SpringBoot - 实现文件上传2(多文件上传、常用上传参数配置)
在前文中我介绍了 Spring Boot 项目如何实现单文件上传,而多文件上传逻辑和单文件上传基本一致,下面通过样例进行演示. 多文件上传 1,代码编写 1)首先在 static 目录中创建一个 up ...
- php 文件上传后缀名与文件类型对照表(几乎涵盖所有文件)
网上有很多php文件上传的类,文件上传处理是php的一个特色(至少手册上是将此作为php特点来展示的,个人认为php在数组方面的优异功能更有特 色),学php的人都知道文件上传怎么做,但很多人在编程中 ...
- django设置并获取cookie/session,文件上传,ajax接收文件,post/get请求及跨域请求等的方法
django设置并获取cookie/session,文件上传,ajax接收文件等的方法: views.py文件: from django.shortcuts import render,HttpRes ...
- PHP实现单文件、多文件上传 封装 面向对象实现文件上传
文件上传配置 客户端配置 1.表单页面 2.表单的发送方式为post 3.添加enctype = "multipart/form-data" <form action=&qu ...
- jsp/servlet实现简单上传和下载
使用JSP/Servlet简单实现文件上传与下载 jsp上传页面代码: <%@ page language="java" import="java.util.*&q ...
- Servlet实现文件上传,可多文件上传
一.Servlet实现文件上传,需要添加第三方提供的jar包 接着把这两个jar包放到 lib文件夹下: 二: 文件上传的表单提交方式必须是POST方式, 编码类型:enctype="mul ...
- Struts2实现文件上传(四)
Struts2实现文件上传 配置文件struts.xml <!-- /* * $Id: struts.xml 1364077 2012-07-21 12:57:02Z lukaszlenart ...
- IE8+SpringMVC文件上传防止JSON下载
今天在IE8测试文件上传的时候发现总是提示下载,原因是上传接口返回的是json,通过以下修改就可以保证返回是json并且不会出现下载的情况: @RequestMapping(value = " ...
- spring mvc ajaxfileupload文件上传返回json下载问题
问题:使用spring mvc ajaxfileupload 文件上传在ie8下会提示json下载问题 解决方案如下: 服务器代码: @RequestMapping(value = "/ad ...
随机推荐
- [转帖]SQL SERVER中隐式转换的一些细节浅析
https://www.cnblogs.com/kerrycode/p/5853257.html 其实这是一篇没有技术含量的文章,精通SQL优化的请绕道.这个缘起于在优化一个SQL过程中,同事问了我一 ...
- [转帖]Linux基础之chkconfig systemd
https://www.cnblogs.com/barneywill/p/10461279.html CentOS6服务用chkconfig控制,CentOS7改为systemd控制 1 syst ...
- [转帖]Kafka中Topic级别配置
https://www.cnblogs.com/moonandstar08/p/6139502.html 一.Kafka中topic级别配置 1.Topic级别配置 配置topic级别参数时,相同(参 ...
- [转帖]Kafka关键参数设置
https://www.cnblogs.com/wwcom123/p/11181680.html 生产环境中使用Kafka,参数调优非常重要,而Kafka参数众多,我们的java的Configurat ...
- [转帖]Armv9 架构相比 Armv8 有何升级/区别:全面性能提升
https://baijiahao.baidu.com/s?id=1695708603852200216&wfr=spider&for=pc 自 2011 年 10 月 Arm 首 ...
- 一次w3wp出现crash的简单解决方案
1. 前几天同事求助, 说一台服务器iis出现多次崩溃的现象,重启iis就可以了. 具体原因不明. 之前遇到过类似的问题 感觉最彻底的解决方案是 抓dump然后使用windbg 进行分析. 但是自 ...
- SQLSERVER2008R2 本地客户端无法连接的问题
sqlserver 数据库无法连接问题. 1. 问题现象与简单分析 今天同事找我说一个 SQLSERVER2008R2的测试环境无法连接了. 提示信息为: 当时猜测是 数据库的 配置出问题了. 去查看 ...
- vite构建打包产物
构建打包产物 build: { assetsInlineLimit: 10240, //静态资源(不会包含js,css)不超过10kb 转化为 base64 [不好含css js] outDir: & ...
- elementui出现展开后子菜单宽度多出1px问题
添加 就可以解决了 .el-menu { border-right-width: 0; } <template> <div class="compen-left-men&q ...
- Volatility 内存数字取证方法
计算机数字取证分为内存取证和磁盘取证,活取证与死取证,不管是那种取证方式,都应尽量避免破环犯罪现场,例如通过内存转储工具对内存进行快照,通过磁盘克隆工具对磁盘进行克隆,方便后期的分析工作,这里将研究内 ...