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

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实战》第四章

时间: 2024-10-12 23:37:44

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

SpringMVC【参数绑定、数据回显、文件上传】

前言 本文主要讲解的知识点如下: 参数绑定 数据回显 文件上传 参数绑定 我们在Controller使用方法参数接收值,就是把web端的值给接收到Controller中处理,这个过程就叫做参数绑定... 默认支持的参数类型 从上面的用法我们可以发现,我们可以使用request对象.Model对象等等,其实是不是可以随便把参数写上去都行???其实并不是的... Controller方法默认支持的参数类型有4个,这4个足以支撑我们的日常开发了 HttpServletRequest HttpServl

Android开发之网络请求通信专题(二):基于HttpClient的文件上传下载

上一篇专题Android开发之网络请求通信专题(一):基于HttpURLConnection的请求通信我们讲解了如何使用httpurlconnection来实现基本的文本数据传输.一般在实际开发中我们可以用于传输xml或者json格式的数据.今天我们来讲解另外一种http网络请求的方式:httpclient,并实现文件的上传和下载. 在这里插个题外话,其实这些网络请求有很多第三方jar包可以使用,这些包都封装得很好了.如果只是想使用,我们就直接拿别人得jar包来用就好.博主这里推荐一个叫xuti

Git 安装,配置及其使用(怎么将本地文件上传到github)

Git介绍 分布式 : Git版本控制系统是一个分布式的系统, 是用来保存工程源代码历史状态的命令行工具; 保存点 : Git的保存点可以追踪源码中的文件, 并能得到某一个时间点上的整个工程项目额状态; 可以在该保存点将多人提交的源码合并, 也可以会退到某一个保存点上; Git离线操作性 :Git可以离线进行代码提交, 因此它称得上是完全的分布式处理, Git所有的操作不需要在线进行; 这意味着Git的速度要比SVN等工具快得多, 因为SVN等工具需要在线时才能操作, 如果网络环境不好, 提交代

SpringMVC简单入门 源码jar包下载和文件上传

1.Spring MVC简介 该项目的源码下载,springMVC和spring的jar包,请到 manyjar.com 下载. 下载方式1:点击下载 下载方式2:百度搜索manyjar(manyjar官网), 搜索springMVCUnit进行下载 Spring MVC基于java实现WEB MVC设计模式的的请求驱动类型的轻量级Web框架,将web层进行职责解耦,简化web开发. SpringMVC框架通过实现Model-View-Controller模式来将数据.业务与展现进行分离. Sp

jsp实现文件上传(二)用cos组件实现文件上传

jsp表单 <%@ page language="java" pageEncoding="utf-8"%> <html> <head> <title>My JSP 'index.jsp' starting page</title> </head> <body> <form action="cos.jsp" method="post" en

asp.net文件/大文件上传需要配置的项目整理

asp.net程序默认上传文件是有大小限制的,默认是4M.IIS7下默认是30M.因此需要配置几个项目进行支持大文件(最大2G)的上传. 1.配置错误 说明: 在处理向该请求提供服务所需的配置文件时出错.请检查下面的特定错误详细信息并适当地修改配置文件. 分析器错误消息: 属性“maxRequestLength”的值无效.错误为: 该值必须在 0-2097151 范围内. 如果出现以下错误:   说明: 执行当前 Web 请求期间,出现未处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中

【SpringMVC学习08】SpringMVC中实现文件上传

之前有写过一篇struts2实现的文件上传,这一篇博文主要来总结下springmvc实现文件上传的步骤.首先来看一下单个文件的上传,然后再来总结下多个文件上传. 1. 环境准备 springmvc上传文件的功能需要两个jar包的支持(点我下载),如下 2. 单个文件的上传 2.1 前台页面 简单的写一下前台页面,注意一点的是form表单中别忘了写enctype="multipart/form-data"属性: <tr> <td>商品图片</td> &

SpringMVC学习--文件上传

简介 文件上传是web开发中常见的需求之一,springMVC将文件上传进行了集成,可以方便快捷的进行开发. springmvc中对多部件类型解析 在 页面form中提交enctype="multipart/form-data"的数据时,需要springmvc对multipart类型的数据进行解析.在springmvc.xml中配置multipart类型解析器. 1 <!-- 文件上传 --> 2 <bean id="multipartResolver&qu

用php实现文件上传二法

PHP(PHP培训 php教程 )(Hypertext Preprocessor)是一种 HTML 内嵌式的语言 (类似 IIS 上的ASP).而 PHP 独特的语法混合了 C.Java.Perl 以及 PHP 式的新语法.它可以比 CGI 或者 Perl&nb sp;更快速的执行动态网页.除此之外,用 PHP 写出来的 Web 后端CGI 程序,可以很轻易的移植到不同的系统平台上. 我们在做网站时,需要访问者的参于才能将网站建设得更加引人注目,这就要求我们从访问者那里得到文章.图片等.因此,文