通过request请求,传入一个fileName参数,即要下载的文件名,从固定路径中取出该文件并下载(可传入路径+文件名,只需修改文件路径获取方法即可)。
代码如下:
protected void download(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setCharacterEncoding("UTF-8");
String fileName = req.getParameter("fileName");
String filePath;
filePath = new File(Config.UPLOAD_PATH).getCanonicalPath() + File.separator + fileName;//获取文件路径
File file = new File(filePath);
if (!file.exists()) return;
resp.setContentType("application/octet-stream");
resp.setHeader("Content-Disposition", "attachment; filename=" + fileName);
try {
req.setCharacterEncoding("UTF-8");
} catch (Exception e) {
}
InputStream is = null;
FileInputStream fileInputStream = null;
ServletOutputStream os = resp.getOutputStream();//提供将二进制数据写入响应的流
BufferedOutputStream bos = new BufferedOutputStream(os);//缓冲流
try {
fileInputStream = new FileInputStream(file);
is = new BufferedInputStream(fileInputStream);
byte[] buffer = new byte[4 * 1024]; //4k Buffer
int read = 0;
while ((read = is.read(buffer)) != -1) {
bos.write(buffer, 0, read);//写入缓冲流
}
} catch (Exception e) {
e.printStackTrace();
} finally {
//关闭输出字节流和response输出流
try {
if (fileInputStream != null) {
fileInputStream.close();
}
bos.close();
os.close();
if (is != null) {
is.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}