zoukankan      html  css  js  c++  java
  • 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:IdeaProjectsdemo02outartifactsdemo02_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();
            }
        }
    }
  • 相关阅读:
    x264
    [转贴]使用dbstart 和dbshut 脚本来自动化启动和关闭数据库
    企业搜索引擎开发之连接器connector(二十六)
    企业搜索引擎开发之连接器connector(二十五)
    深入分析 Java 中的中文编码问题
    深入分析 Java I/O 的工作机制
    企业搜索引擎开发之连接器connector(二十四)
    企业搜索引擎开发之连接器connector(二十三)
    企业搜索引擎开发之连接器connector(二十二)
    企业搜索引擎开发之连接器connector(二十一)
  • 原文地址:https://www.cnblogs.com/mylovertomylove/p/14488530.html
Copyright © 2011-2022 走看看