• Servlet笔记2-文件上传


    Servlet上传文件:
      Servlet 3.0改进了部分API,其中HttpServletRequest增加了对文件上传的支持。

      HttpServletRequest提供了两个方法来处理文件上传:
        1.Part getPart(String name):根据名称来获取文件上传域

        2.Collection<Part> getParts():获取所有的文件上传域

      上面两个方法的返回值都涉及一个API:Part,每个Part对象对应于一个文件上传域,该对象提供了很多方法来范文上传文件的文件类型、大小、输入流等,并提供了一个write(String file)方法将上传文件写入服务器磁盘

      向服务器上传文件,表单里要使用<input type="file" .../>,并且,上传文件一定要为表单域设置enctype属性。
    表单的enctype属性指的是表单数据的编码方式,该属性有三个值:
      1.application/x-www-form-urlencoded:默认的编码方式,只处理表单域里的value属性值,采用这种编码方式的表单会将表单域的值处理成URL编码方式

      2.multipart/form-data:这种编码方式会以二进制流的方式来处理表单数据,这种编码方式会把文件域指定文件的内容也封装到请求参数里

      3.text/plain:这种编码方式当表单的action属性为mailto:URL的形式时比较方便,这种方式主要适用于直接通过表单发送邮件的方式

      文件上传示例:

      页面jsp:

    <%--
      Created by IntelliJ IDEA.
      User: Administrator
      Date: 2018/1/4
      Time: 16:46
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Servlet文件上传</title>
    </head>
    <body>
    
        <form action="${pageContext.request.contextPath}/upload" method="post" enctype="multipart/form-data">
            普通参数:<input type="text" name="inputText" ><br>
            选择文件:<input type="file" name="file" ><br>
            <input type="submit" value="上传">
        </form>
    </body>
    </html>

      Servlet程序:

    /**
     * Description:servlet
     * Author: Eleven
     * Date: 2018/1/13 16:23
     */
    @WebServlet(name="upload",urlPatterns = "/upload")
    @MultipartConfig  //处理文件上传的Servlet,必须要加此注解
    public class UploadServlet extends HttpServlet{
        @Override
        protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //解决接收参数为中文乱码的问题
            request.setCharacterEncoding("UTF-8");
            //解决向页面输出内容为乱码,即使用out.println()的时候
            response.setContentType("text/html;charset=UTF-8");
            PrintWriter out = response.getWriter();
    
            //获取普通请求参数
            String inputText = request.getParameter("inputText");
            System.out.println("普通的参数为:"+inputText);
            //获取文件上传域
            Part part = request.getPart("file");
            //文件的上传类型
            System.out.println("文件的上传类型:"+part.getContentType());
            //文件上传的大小
            System.out.println("上传文件的大小:"+part.getSize());
            //文件上传域的Header Name
            Collection<String> headerNames = part.getHeaderNames();
            //遍历文件上传域的Header Name Value
            for(String headerName:headerNames){
                System.out.println(headerName+"---->"+part.getHeader(headerName));
    
            }
    
            //获取包含原始文件名的字符串
            String fileNameInfo = part.getHeader("content-disposition");
            //提取上传文件的文件名
            String fileName = fileNameInfo.substring(fileNameInfo.indexOf("filename="")+10,fileNameInfo.length()-1);
            //将文件写入服务器磁盘  保存在web应用根路径下的upload文件下
            part.write(getServletContext().getRealPath("upload")+"/"+fileName);
    
            out.println("文件上传成功!");
        }
    
    }

      

      对于传统的文件上传需要借助common-fileupload等工具,处理起来有点复杂,借助Servlet 3.0的API,处理文件就变得比较简单了。

  • 相关阅读:
    iterm2 配色修改
    让Dock自动 显示/隐藏 不再有延迟
    Xcode更改配色方案
    CocoaPods安装与使用
    CocoaPods安装和使用及问题:Setting up CocoaPods master repo
    CocoaPods安装和使用教程
    RubyGems 镜像
    iOS Mac系统下Ruby环境安装
    MAC机中安装RUBY环境
    Kibana+Logstash+Elasticsearch 日志查询系统
  • 原文地址:https://www.cnblogs.com/eleven258/p/8286650.html
Copyright © 2020-2023  润新知