JavaWeb—文件的上传和下载

文件的上传

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>表单上传</title>
</head>
<body>
<!--enctype="multipart/form-data"必须要有这个-->
<form method="post" enctype="multipart/form-data" action="uploadServlet">
    姓名:<input type="text" name="uname"> <br>
    文件:<input type="file" name="myfile"> <br>
    <button type="submit">提交</button>
</form>
</body>
</html>
@WebServlet("/uploadServlet")
@MultipartConfig//如果是文件上传一定要加这个注解
public class UploadServlet extends HttpServlet {
    /**
     * 文件上传.....
     * uname: 张三
     * 上传的文件名: 徐裴_简历.docx
     * 文件存放的路径:D:\IdeaProjects\demo02\out\artifacts\demo02_war_exploded\
     */
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("文件上传.....");

        //设置请求的编码格式
        request.setCharacterEncoding("UTF-8");

        //获取普通的表单项(获取参数)
        String uname = request.getParameter("uname");
        System.out.println("uname: " + uname);

        //获取Part对象 Servlet将multipart/form-data的POST封装成Part对象
        Part part = request.getPart("myfile");//表单中文件域值
        //通过Part对象得到上传的文件名
        String fileName = part.getSubmittedFileName();
        System.out.println("上传的文件名: " + fileName);
        String filePath = request.getServletContext().getRealPath("/");
        System.out.println("文件存放的路径:" + filePath);
        //上传文件到指定的路径
        part.write(filePath + "/" + fileName);
    }
}

文件的下载

(1)超链接实现下载

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文件下载</title>
</head>
<body>
    <!--超链接下载-->
    <!--浏览器能够识别的资源-->
    <a href="download/1.txt" >文本文件</a>
    <a href="download/1.png">图片文件</a>
    <!--浏览器不能识别的资源-->
    <a href="download/apache-tomcat-8.5.63-windows-x64.zip">压缩文件</a>
    <hr>
    <!--download可以不用设置属性值,会自动使用默认文件名,如果设置了download属性,就使用设置的属性名字-->
    <a href="download/1.txt" download>文本文件</a>
    <a href="download/1.png" download="考研必刷题">图片文件</a>
</body>
</html>

这里的文件是自己添加在包里的:

   

(2)后台实现下载

 

<form action="downloadServlet">
        文件名:<input type="text" name="fileName" placeholder="请输入要下载的文件名">
        <button>下载</button>
</form>
@WebServlet("/downloadServlet")
public class DownloadServlet 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");
        //参数的非空判断  fileName.trim()去除字符串的前后空格
        if(fileName == null || "".equals(fileName.trim())) {
            response.getWriter().write("请输入想要下载的文件名!");
            response.getWriter().close();
            return;
        }

        //得到图片存放的路径
        String path = request.getServletContext().getRealPath("/download/");
        //通过路径得到file对象
        File file = new File(path + fileName);
        //判断文件是否存在和是否为一个标准文件
        if(file.exists() && file.isFile()) {
            //文件下载的方法
            //设置响应类型
            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 @ 2021-03-06 16:12  AnnRan  阅读(91)  评论(0编辑  收藏  举报