JavaWeb—文件的上传和下载

2021-06-09 12:03

阅读:692

标签:sub   override   param   BMI   https   null   win   浏览器   图片   

文件的上传

DOCTYPE html>
html lang="en">
head>
    meta charset="UTF-8">
    title>表单上传title>
head>
body>

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>
    
    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();
        }
    }
}

 

JavaWeb—文件的上传和下载

标签:sub   override   param   BMI   https   null   win   浏览器   图片   

原文地址:https://www.cnblogs.com/mylovertomylove/p/14488530.html


评论


亲,登录后才可以留言!