SpringBoot上传文件跟传统的SpringMVC的区别
2017-07-04 16:14
344 查看
在新项目中,项目组选择了之前重来没用过的SpringBoot。今天再处理文件上传时起初就照搬了之前项目中SpringMVC的配置和代码,结果总是报参数不存在的错误,改来改去弄了很久才在网上找到解决问题的办法,在此记录一下!
一、先来看一下传统的SpringMVC处理文件上传怎么做的
二、在SpringBoot中就需要把上面配置到Spring的配置文件中的CommonsMultipartResolver配置到启动项的配置中去(ps:SpringBoot还不是很熟),Controller代码不变。
一、先来看一下传统的SpringMVC处理文件上传怎么做的
<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.5</version> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.2.1</version> </dependency>
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="defaultEncoding" value="utf-8"></property> <property name="maxUploadSize" value="10485760000"></property> <property name="maxInMemorySize" value="10485760"></property> </bean>
//保存图片的绝对路径 @Value("${picture_absolute_path}") private String picture_absolute_path; //图片扩展名 @Value("${picture_extension}") private String picture_extension; //图片服务器网址 @Value("${picture_service_url}") private String picture_service_url; //图片大小 @Value("${picture_max_size}") private String picture_max_size; @RequestMapping(value="/upload_picture",produces={"application/json;charset=UTF-8"}) @ResponseBody public String uploadPicture(@RequestParam("editormd-image-file") CommonsMultipartFile file){ if(file == null){ return createResultJson(0, "图片不能为空", ""); } SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); String month_format = sdf.format(new Date()); String dir= picture_absolute_path+File.separator+month_format; File dirFile = new File(dir); if(!dirFile.exists()){ dirFile.mkdirs(); } Long fileSize = null; String regex = "^[1-9]\\d*$"; if(picture_max_size!=null && picture_max_size.matches(regex)){ fileSize = Long.valueOf(picture_max_size); } String uuid = UUIDGenerator1.getUUID(); try{ String fileName = Strings.nullToEmpty(file.getOriginalFilename()); //图片扩展名 String fileExt = fileName.substring(fileName.lastIndexOf(".")); if(fileSize!=null){ if(file.getSize()>fileSize){ log.error("图片大小超过限制:{}",fileName); return createResultJson(0, "图片不能超过"+(fileSize/1024/1024)+"M",""); } } //文件重命名 String newFileName = uuid+fileExt; if(picture_extension==null || picture_extension.length()==0 || fileName.matches(".*\\.("+picture_extension+")")){ File targetFile = new File(dir+File.separator+newFileName); file.transferTo(targetFile); return createResultJson(1, "success", picture_service_url+month_format+File.separator+newFileName); }else{//格式不正确 log.error("图片格式不正确:{}",fileName); return createResultJson(0, "图片格式不正确",""); } }catch(Exception fe){ fe.printStackTrace(); log.error("图片上传失败:{}",fe.getMessage()); return createResultJson(0, "图片上传失败",""); } } public String createResultJson(int success,String message,String url){ JSONObject re = JSONObject.fromObject("{}"); re.put("success", success); re.put("message", message); re.put("url",url); return re.toString(); }
二、在SpringBoot中就需要把上面配置到Spring的配置文件中的CommonsMultipartResolver配置到启动项的配置中去(ps:SpringBoot还不是很熟),Controller代码不变。
@Configuration @ImportResource(locations = { "classpath:applicationContext.xml"}) //exclude表示自动配置时不包括Multipart配置 @EnableAutoConfiguration(exclude = {MultipartAutoConfiguration.class}) @ComponentScan @SpringBootApplication @ServletComponentScan(value={"com.xunlei","cn.xunlei","cn.xunlei.cbase.xlalarm"}) public class xlalarmApplication { public static void main(String[] args) { SpringApplication.run(xlalarmApplication.class, args); } //显示声明CommonsMultipartResolver为mutipartResolver @Bean(name = "multipartResolver") public MultipartResolver multipartResolver(){ CommonsMultipartResolver resolver = new CommonsMultipartResolver(); resolver.setDefaultEncoding("UTF-8"); // resolver.setResolveLazily(true);//resolveLazily属性启用是为了推迟文件解析,以在在UploadAction中捕获文件大小异常 resolver.setMaxInMemorySize(40960); resolver.setMaxUploadSize(10*1024*1024);//上传文件大小 10M 10*1024*1024 return resolver; } }
相关文章推荐
- springboot 配置springmvc文件上传大小
- SpringMVC文件上传、拦截器、与Spring的整合以及与Struts2的比较
- springmvc上传文件报错org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.springframework.web.multipart.MultipartFile]
- spring boot 文件上传
- springboot+文件上传和下载
- Spring Boot整合UEditor,解决找不到上传文件的问题
- 基于spring-boot的web应用,ckeditor上传文件图片文件
- SpringMVC案例3----spring3.0项目拦截器、ajax、文件上传应用
- Spring Boot基础教程12-web应用开发-文件上传
- Springboot 之 多文件上传-知识林
- 第一个 Spring Boot 程序 : 文件上传
- springboot 配置文件 .properties和.yml的写法区别
- spring boot 文件上传接口设计
- 在spring boot中使用restTemplate上传大文件Java heap space
- 04springMVC结构,mvc模式,spring-mvc流程,spring-mvc的第一个例子,三种handlerMapping,几种控制器,springmvc基于注解的开发,文件上传,拦截器,s
- (29)Spring boot 文件上传(多文件上传)【从零开始学Spring Boot】
- Spring boot 文件上传(多文件上传)
- JavaEE框架——Springmvc入门(注解URL核心类详解、文件上传和下载)、和Spring的整合
- (文件)图片上传,Spring或SpringMVC框架
- 010,spring boot 文件上传