• 图片的上传和下载


     1. 先导包

    2. 上传

    <body>
    <%--
    文件上传的必要条件 :
    1. 必须在form 表单中 , method = post
    2.form 标签中的 encType = multipart/form-data
    3.使用input type=file 选择上传的文件
    4.servlet 接收文件
    --%>
    
    <
    <form action="http://localhost:8080/JSP/uploadServlet" method="post" enctype="multipart/form-data">
        用户名: <input type="text" name="username"/><br>
        头像 : <input type="file" name="photo"><br>
        <input type="submit" value="提交">
    </form>
    </body>
    public class UploadServlet extends HttpServlet {
    
        //文件上传
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //设置请求的字符编码
            req.setCharacterEncoding("UTF-8");
            //1. 先判断上传的数据是否是多段数据 ( 只有多段的数据 , 才是文件数据)
            if (ServletFileUpload.isMultipartContent(req)){
                //2.创建用于解析数据的工具类 ServletFileUpload
                FileItemFactory fileItemFactory = new DiskFileItemFactory();
                ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory);
                 try{
                     //3.解析上传的数据 , 得到每一个表单项
                     List<FileItem> list = servletFileUpload.parseRequest(req);
                     //4.循环集合 , 判断是普通的数据 还是 文件类型
                     for (FileItem file : list) {
                        if (file.isFormField()){
                            //普通数据
                            System.out.println("表单项的name属性 :"+file.getFieldName());
                            System.out.println("表单项的value属性 : "+file.getString("UTF-8"));
                        }else{
                            //文件类型
                            System.out.println("表单项的name属性 :"+file.getFieldName());
                            //String fileName = URLEncoder.encode(file.getName(), "UTF-8");
                            System.out.println("上传的文件名 : "+file.getName());
                            //文件保存位置
                            file.write(new File("D:\workspace\idea\javaWeb\JSP\web\file\"+file.getName()));
                        }
                     }
                 }catch(Exception e){
                     e.printStackTrace();
                 }
            }
        }
    }
    <servlet>
            <servlet-name>UploadServlet</servlet-name>
            <servlet-class>com.atguigu.servlet.UploadServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>UploadServlet</servlet-name>
            <url-pattern>/uploadServlet</url-pattern>
        </servlet-mapping>

    3.下载

    public class DowmloadServlet extends HttpServlet {
    
        //文件下载
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //1.获取要下载的文件名
            String downloadFileName = "头像.jpg";
            //2.读取要下载的文件内容 ( 通过 servletContext 对象读取)
            ServletContext servletContext = getServletContext();
            //3.获取要下载的文件类型
            String mimeType = servletContext.getMimeType("/file/" + downloadFileName);
            System.out.println("下载的文件类型 : "+mimeType);
            //4.在回传前 , 通过响应头告诉客户端返回的数据类型
            resp.setContentType(mimeType);
            //5.告诉客户端 收到的数据是用于下载的
            /*
            Content-Disposition : 表示收到的数据怎么处理
            attachment : 附件 , 表示下载使用
            filename: 指定文件名
            没有处理中文乱码 : resp.setHeader("Content-Disposition","attachment;filename="+downloadFileName);
             */
    
            //处理文件名的中文乱码问题
            if (req.getHeader("User-Agent").contains("Firefox")) {
                // 如果是火狐浏览器使用Base64编码
                resp.setHeader("Content-Disposition", "attachment; filename==?UTF-8?B?" + new BASE64Encoder().encode(downloadFileName.getBytes("UTF-8")) + "?=");
            } else {
                // 如果不是火狐,是IE或谷歌,使用URL编码操作
                resp.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(downloadFileName, "UTF-8"));
            }
    
            //6.获取文件的输入流
            InputStream inputStream = servletContext.getResourceAsStream("/file/" + downloadFileName);
            //7.获取相应的输出流
            OutputStream outputStream = resp.getOutputStream();
            //8.将输入流中的数据 , 复制到 输出流中
            IOUtils.copy(inputStream,outputStream);
    
        }
    }
    <servlet>
            <servlet-name>DownloadServlet</servlet-name>
            <servlet-class>com.atguigu.servlet.DowmloadServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>DownloadServlet</servlet-name>
            <url-pattern>/downloadServlet</url-pattern>
        </servlet-mapping>
  • 相关阅读:
    [译]rabbitmq 2.1 Consumers and producers (not an economics lesson)
    mysql存储过程执行权限问题
    修改linux端口范围 ip_local_port_range
    centos6 自启动任务
    randomize_va_space
    linux 捕获信号处理中遇到的死锁
    squid基础配置
    [转]你应该了解的 一些web缓存相关的概念
    libevent简介 构成
    Libevent windows/linux下编译
  • 原文地址:https://www.cnblogs.com/Anonymity-zhang/p/14690609.html
Copyright © 2020-2023  润新知