hello阿诚

有兴趣留言交流

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 requestHttpServletResponse responsethrows ServletExceptionIOException {
        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();
        }



    }
}


 
 
 
 
 
 

posted on 2021-07-21 10:15  陆秋明v  阅读(32)  评论(0编辑  收藏  举报

导航