16-下载文件
前端有两种,一种是通过 a 标签 下载
另一种是下载 后端存的 文件
------------
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>下载</title>
</head>
<body>
<!-- 超链接 下载 当使用超链接 a标签的时候 如果遇到浏览器 识别的资源,就会显示内容,如果不识别
就会下载
而在 a 标签里面 添加 download 属性 会默认下载 如果设置了 download 属性值,则使用设置的值为文件名
-->
<a href="downFiles/r.txt">文本</a>
<a href="downFiles/头像.jpg">图片</a>
<a href="downFiles/b.zip">压缩宝</a>
<hr/>
<!--其中 文本和 图片可以打开 但是压缩包会直接下载-->
<a href="downFiles/头像.jpg" download="图片.jpg">图片</a>
<!--下载图片-->
<form action="downLoadFile" method="post">
文件名: <input type="text" name="fileName" placeholder="请输入文件名" />
<button>提交</button>
</form>
</body>
</html>
-------------------
后端接受 前端数据 对 本地的查找
package yu.upload;
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.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
/* 1,需要通过 response.setContextType 方法设置 Content-type 头字段的值 为浏览器无法识别
魔头方式或者 激活某个程序来处理 mime类型 例如 application/octet-stream 或者
application/x-msdownload 等
2, 需要通过 response.setHeader 方法设置 Content-Disposition 头的值 为attachment;filename= 文件名
3.读取 下载文件 调用 response.getOutputStream 方法向客户端写入附件内容
* */
@WebServlet("/downLoadFile")
public class downLoadFile extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("下载----");
// 设置请求的编码格式
request.setCharacterEncoding("UTF-8");
// 设置返回的编码格式
response.setContentType("text/html;charset=UTF-8");
// 获取请求参数
String fileName = request.getParameter("fileName");
// 参数的非空判断 trim() 去除字符串的空格
if(fileName == null || "".equals(fileName.trim())){
response.getWriter().write("请输入要下载的文件名字");
return;
}
// 得到 存放文件的根路径
String path = request.getServletContext().getRealPath("/downFiles/");
// 通过路径判断得到file 对象
File file = new File(path + fileName);
// 判断文件对象 是否是要给标准文件
if(file.exists() && file.isFile()){
// 设置响应类型(浏览器无法使用某种方式或激活某个程序来处理 mime类型)
response.setContentType("application/x-msdownload");
// 设置相应头
response.setHeader("Content-Disposition","attachment;filename="+fileName);
// 得到文件的输入流
InputStream in = new FileInputStream(file);
// 得到字节的输出流
ServletOutputStream out = response.getOutputStream();
// 定义byte 数组
byte[] bytes = new byte[1024];
// 定义长度
int len = 0;
// 循环输出
while ((len = in.read(bytes)) != -1){
// 输出
out.write(bytes,0,len);
}
// 关闭资源
out.close();
in.close();
}else {
response.getWriter().write("文件不存在请重使用");
// 关闭这个流
response.getWriter().close();
}
}
}