• 后端——框架——视图层框架——spring mvc——MultipartResolver


      MutlipartResolver负责处理multipart/form-data类型的请求,spring mvc本身没有提供技术实现,而是依赖于其他技术。

    MultipartResolver有两个实现类,其中CommonsMultipartResolver依赖于Apache Commons File upload,在使用时需要导入commons-io架包

    StandardServletMultipartResolver依赖于原生的Servlet技术。

    处理multipart/form-data数据的核心是获取请求中的输入流,当获取到输入流之后,后续的操作视具体的业务而定,如果是文件上传的请求,把输入流写到服务器的磁盘即可

    1、CommonsMultipartResolver

    使用CommonsMultipartResolver,获取请求的输入流是通过获取MultiPartFile对象,直接写在方法的参数中即可。

    使用步骤如下:

      第一步,创建CommonsMultipartResolver对象,注入到容器中,名称为multipartResolver

    @Bean(name="multipartResolver")
    public MultipartResolver getMultipartResolver() throws IOException {
    	// 创建对象
    	CommonsMultipartResolver multipart = 
    new CommonsMultipartResolver();
    	// 设置属性值
    	// 设置默认的编码格式
    	multipart.setDefaultEncoding("UTF-8");
    	// 5GB
    	multipart.setMaxInMemorySize(5 * 1024 * 1024 * 1024);
    	// 设置上传文件的大小
    	multipart.setMaxInMemorySize(25 * 1024 * 1024 * 1024);
    	// 设置单个上传文件的最大值,20M
    	multipart.setMaxUploadSizePerFile(20 * 1024 * 1024);
    	// 设置是否延迟解析multipart请求
    	multipart.setResolveLazily(false);
    	// 设置文件存放的临时目录
    	Resource tempDir = new FileSystemResource("");
    	multipart.setUploadTempDir(tempDir);
    	return multipart;
    }
    

       第二步,在Controller,在处理文件上传请求中添加Multipart参数。之后调用MultipartFile对象的API即可。

    @PostMapping("/test/upload")
    public String handleFileUpload(@RequestParam("testFile") MultipartFile file) {
      return "";
    }
    

    2、StandardServletMultipartResolver

      使用StandardServletMultipartResolver,获取请求输入流是通过Part对象,直接写在参数中即可

      使用步骤如下:

    第一步,创建StandardServletMultipartResolver对象,并注入,名称为multipartResolver

    @Bean(name="multipartResolver")	
    public  MultipartResolver getMultipartResolver() throws IOException {
    	return new StandardServletMultipartResolver();
    }
    

      第二步,在DispatcherServlet中添加multiConfig配置。MultipartConfigElement对象的所有属性都是通过构造器方式传入的。没有setXXX方法

    // 配置DispatcherServlet
    // 创建DispatcherServlet对象
    DispatcherServlet dp = new DispatcherServlet(context);
    // 获取它的配置信息类,等价于在web.xml中配置servlet-name和servlet-class标签
    ServletRegistration.Dynamic registration = servletContext.addServlet("dispatcherServlet", dp);
    // Multipart配置对象
    MultipartConfigElement multipartConfig = new MultipartConfigElement("D:\\tempDir");
    registration.setMultipartConfig(multipartConfig);
    

      第三步,在Controller,在处理文件上传请求中添加Part参数。

  • 相关阅读:
    xshell常用命令
    linux传输文件命令: rz 和 sz
    使用openssh-clients的scp命令来传输文件
    RabbitMQ初学之二:直接发送消息到队列
    [App]华为P6设置与Xamarin Studio连通测试
    [Boost]图形处理库Boost::Polygon
    [App]Taste VS2015 && Android Studio
    [Linux&Vim]输入输出流
    [SSD大法好]神舟K480-I5-D3鸟枪换炮M6S
    [IoLanguage]Io Tutorial[转]
  • 原文地址:https://www.cnblogs.com/rain144576/p/14823848.html
Copyright © 2020-2023  润新知