前端代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>文件的下载</title>
</head>
<body>
<img src="downLoad.jpg" height="100" width="100">
<a href="downLoad?fileName=downLoad.jpg">下载图片</a>
</body>
</html>
后台代码
package com.it.controller;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
@WebServlet("/downLoad")
public class FileDownload extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取请求传递的文件名(需要下载的文件的名字)
String name = request.getParameter("fileName");
//通过name找到服务器中的真是文件
//需要一个输入流
InputStream inputStream = new FileInputStream("E:\\Idea2019-03\\项目\\fileUpload\\web\\" + name);
//如果包含中文 处理字符集
String fileName = URLEncoder.encode(name, "UTF-8");
//设置响应的contentType(打开文件保存的路径对话框)
response.setContentType("application/x-msdownload");
//设置下载文件的名字和文件类型
response.setHeader("Content-disposition", "attachment;filename=" + name);
//将文件通过流的方式回写浏览器
ServletOutputStream outputStream = response.getOutputStream();
byte[] b = new byte[1024 * 10];
int readLength = inputStream.read(b);
while (readLength != -1) {
outputStream.write(b, 0, readLength);
outputStream.flush();
readLength = inputStream.read(b);
}
}
}