7.2文件上传

7.2处理multipart形式的数据(文件上传)
7.2.1配置multipart解析器:
DispatcherServlet没有实现Multipart请求数据的功能。
它将该任务委托给MultipartResolver接口的实现来处理。
Spring3.1开始为我们提供了两个解析类:
StandardServletMultipartResolver、
CommonsMultipartResolver
package spittr.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.multipart.MultipartResolver;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import org.springframework.web.multipart.support.StandardServletMultipartResolver;

/**
* @version 版权 Copyright(c)2019
* @ClassName:
* @Descripton:
* @author: Shing
* @date: 2020-06-13 14:21
*/

//开启扫描,启用springmvc
@Configuration
@EnableWebMvc
@ComponentScan("spittr.web")
public class WebConfig extends WebMvcConfigurerAdapter {


    (代码)......

/**
* 配置文件上传解析
* DispatcherServlet没有实现Multipart请求数据的功能。
* 它将该任务委托给MultipartResolver接口的实现来处理。
* Spring3.1开始为我们提供了两个解析类:
* StandardServletMultipartResolver
* CommonsMultipartResolver
* @return
*/
@Bean
public MultipartResolver multipartResolver(){
return new StandardServletMultipartResolver();
}



}
因为使用了继承AbstractAnnotationConfigDispatcherServletInitializer的方式创建dispatcherServlet实例注册到Servlet上下文中,我们并不会拿到Dynamic Servlet registration引用供我们使用。但是可以通过重载customizeRegistration()方法获取到Dynamic registration来配置。
package spittr.config;

import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

import javax.servlet.MultipartConfigElement;
import javax.servlet.ServletRegistration;

/**
* @version 版权 Copyright(c)2019
* @ClassName:
* @Descripton: 使用java将DispatcherServlet配置到Servlet容器中,而不是web.xml文件.
* @author: Shing
* @date: 2020-06-12 16:54
*/
public class SpittrWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

/**
* 因为使用了继承AbstractAnnotationConfigDispatcherServletInitializer的方式
* 创建dispatcherServlet实例注册到Servlet上下文中,我们并不会拿到Dynamic Servlet registration引用
* 供我们使用。但是可以通过重载customizeRegistration()方法获取到Dynamic registration来配置。
* @param registration
*/
@Override
protected void customizeRegistration(ServletRegistration.Dynamic registration) {
//开启处理multipart请求和文件上传
//设置文件最大不超过2M
//设置请求最大不超过4M
//fileSizeThreshold=0
registration.setMultipartConfig(new MultipartConfigElement("/tmp/spittr/uploads",
2097152,4194304,0));
}


}
文件上传接收的几种方式:
package spittr.web;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.Part;
import java.io.File;
import java.io.IOException;

@Controller
@RequestMapping(value = {"/","/homepage"})
public class HomeController {

/**
* 文件上传方案1,适用于Servlet3.0以下的容器,需要配置配置文件上传解析器MultipartResolver,获取到二进制
* @return
*/
@RequestMapping(value = "register",method = RequestMethod.POST)
public String processRegister(@RequestPart("profilePicture")byte[] profilePicture){
return "";
}

/**
* 文件上传方案2,适用于Servlet3.0以下的容器,需要配置配置文件上传解析器MultipartResolver
* @param file
* @return
*/
@RequestMapping(value = "register2",method=RequestMethod.POST)
public String processUpload(@RequestPart("profilePicture") MultipartFile file) {

System.out.println(file.getSize());

System.out.println("----> " + file.getName() + " :: " + file.getSize());

try {
file.transferTo(new File("/Users/shinenggao/Tbak/xiangmajin1.png"));
}catch (IOException e){
e.printStackTrace();
System.out.println("写入异常");
}

return "templates/home";
}

/**
* 文件上传方案3,可不不用配置文件上传解析器MultipartResolver
* @return
*/
@RequestMapping(value = "register3",method = RequestMethod.POST)
public String processRegister(@RequestPart("profilePicture") Part profilePicture){
try {
profilePicture.write("/Users/shinenggao/Tbak/xiangmajin.png");
}catch (IOException e){
e.printStackTrace();
System.out.println("写入异常");
}
return "templates/home";
}

}







posted @ 2021-01-14 19:55  _Shing  阅读(141)  评论(0)    收藏  举报