SpringMVC常用配置(二),最简洁的配置实现文件上传

举报
江南一点雨 发表于 2021/08/16 22:52:12 2021/08/16
【摘要】 Spring、SpringMVC持续介绍中,基础配置前面已经介绍了很多,如果小伙伴们还不熟悉可以参考这几篇文章: 1.Spring基础配置 2.Spring常用配置 3.Spring常用配置(二) 4.SpringMVC基础配置(通过注解配置,非xml配置) 5.SpringMVC常用配置 OK ,那么这里我想说另外一个话题,那就是文件上传,我之前...

Spring、SpringMVC持续介绍中,基础配置前面已经介绍了很多,如果小伙伴们还不熟悉可以参考这几篇文章:

1.Spring基础配置
2.Spring常用配置
3.Spring常用配置(二)
4.SpringMVC基础配置(通过注解配置,非xml配置)
5.SpringMVC常用配置

OK ,那么这里我想说另外一个话题,那就是文件上传,我之前在做Android开发的时候,文件上传我们一般会有两种策略,一种是通过IO流上传,还有一种是通过表单上传,其实这两种在客户端实现起来都是很简单的,在服务端处理会略有差别,个人感觉IO上传代码简单,但是也有很多硬伤,还是表单上传更合适。特别是如果我们的后台程序如果既面向移动端,又面向Web前端,那么通过表单上传无疑是最佳解决方案。OK,废话不多说,我们来看看如何通过一个最简单的配置来实现文件的上传。
我们主要通过如下几个步骤来实现这个功能:

1.引入依赖
2.创建文件上传页面
3.配置SpringMVC
4.Web配置
5.编写Controller

OK,按照这个步骤我们一步一步来看。

引入依赖

当然在引入依赖之前我们需要先创建一个被Maven管理的Web Project,创建方式我就不多说了,小伙伴们如果不熟悉可以参考这篇文章SpringMVC基础配置(通过注解配置,非xml配置)。创建成功之后在SpringMVC框架的基础之上再添加如下两个依赖就行了:

 <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.2</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.5</version> </dependency>
  

两个依赖库,一个用来解决文件上传,一个简化IO操作。

创建文件上传页面

这个是一个简单的jsp页面,我在resources文件夹中创建views文件夹,在views文件夹中创建index.jsp文件,如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head> <title>文件上传</title>
</head>
<body>
<form action="upload" enctype="multipart/form-data" method="post"> <input type="file" name="file" /> <input type="submit" value="上传" />
</form>
</body>
</html>
  

这个页面很简单,没啥好说的,注意action是upload就行了。

配置SpringMVC

这一步算是比较关键的一步,但是这里只有一个新Bean,我们先来看看类:

@Configuration
@EnableWebMvc
@ComponentScan("org.sang")
public class MVCConfig extends WebMvcConfigurerAdapter{ @Bean public InternalResourceViewResolver viewResolver() { InternalResourceViewResolver viewResolver = new InternalResourceViewResolver(); viewResolver.setPrefix("/WEB-INF/classes/views/"); viewResolver.setSuffix(".jsp"); viewResolver.setViewClass(JstlView.class); return viewResolver; } @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/index").setViewName("/index"); } @Bean public MultipartResolver multipartResolver() { CommonsMultipartResolver resolver = new CommonsMultipartResolver(); resolver.setMaxUploadSize(1000000); return resolver; }
}
  

这个类在前面几篇博客中已经反复说过好几次了,这里只是多了一个multipartResolver方法,该方法用来提供一个MultipartResolver的Bean,该方法中主要根据业务需求对CommonsMultipartResolver进行配置,我这里以限制上传文件大小为例。

Web配置

这个也是老生常谈,前面几篇博客也说了n多次了,不赘述:

public class WebInit implements WebApplicationInitializer { public void onStartup(ServletContext servletContext) throws ServletException { AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext(); context.register(MVCConfig.class); context.setServletContext(servletContext); ServletRegistration.Dynamic servlet = servletContext.addServlet("dispatcher", new DispatcherServlet(context)); servlet.addMapping("/"); servlet.setLoadOnStartup(1); }
}
  

编写Controller

@Controller
public class UploadController { @ResponseBody @RequestMapping(value = "/upload",method = RequestMethod.POST,produces = "text/plain;charset=UTF-8") public String upload(MultipartFile file) { try { FileUtils.writeByteArrayToFile(new File("/home/sang/workspace/"+file.getOriginalFilename()),file.getBytes()); return "上传成功"; } catch (IOException e) { e.printStackTrace(); return "上传失败"; } }
}
  

这里通过Common-IO 中提供的相关方法,直接将上传文件的byte数组写成文件就行。
这个时候运行项目,在浏览器中打开index.jsp,如下:
这里写图片描述

选择文件然后上传即可在电脑的/home/sang/workspace目录下看到上传的文件。

本案例下载地址
本案例GitHub地址

以上。

参考资料:
《JavaEE开发的颠覆者 Spring Boot实战》第四章

文章来源: wangsong.blog.csdn.net,作者:_江南一点雨,版权归原作者所有,如需转载,请联系作者。

原文链接:wangsong.blog.csdn.net/article/details/53717753

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。