Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >猿蜕变系列7——也说说springMVC上传姿势

猿蜕变系列7——也说说springMVC上传姿势

作者头像
山旮旯的胖子
发布于 2020-07-28 08:57:28
发布于 2020-07-28 08:57:28
93700
代码可运行
举报
文章被收录于专栏:猿人工厂猿人工厂
运行总次数:0
代码可运行

看过之前的蜕变系列文章,相信你对springMVC有了一定的认识。对springMVC的异常处理,也有了一定的认识。今天我们来开启新讨论,讲一讲web开发中会经常遇到的一个功能,文件上传。

文件上传这种小事情,我们自然不用担心啦。SpringMVC提供了强有力的支持,不会让你退化到使用request的inputStram的老路上去哒。一般来说,使用commons组件就轻松搞定啦。

我们在讲文件上传文件的功能之前,先做一点准备工作啦,我们先在webapp目录下创建一个名为upload的文件夹用于存放上传的文件。

然后,再编写一个文件上传的表单页面upload.jsp文件,增加一个表单即可。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<%@ page language="java" contentType="text/html;charset=utf-8"
    pageEncoding="utf-8"isELIgnored="false"%>
<!DOCTYPE html >
<html>
<head>
<title>Spring MVC 文件上传样例</title>
</head>
<body>
   <form action="upload.do" enctype="multipart/form-data"method=post id="picForm">
    <lable>请选择需要上传的文件:</lable>
      <input type="file"name="pic" id=""pic""/><br />
    
      <input type="submit"value="提交" id="submit"/><br />
   </form>
</body>

注意:上传文件的表单需要在from标签中加入属性enctype="multipart/form-data",没有这个等待你的必然是,一顿操作猛如虎,抬头一看原地杵。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
</html>显示上传文件的页面showUpload.jsp
<%@ page language="java" contentType="text/html;charset=utf-8"
    pageEncoding="utf-8"isELIgnored="false"%>
<!DOCTYPE html >
<html>
<head>
<title>Spring MVC 文件上传样例</title>
 
</head>
<body>
   <img src="${path}"/>
</body>
</html>

编写Controller代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.pz.web.study.springmvc.controller;
 
import java.io.File;
 
import javax.servlet.http.HttpServletRequest;
 
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
 
 
@Controller
public class UploadFileControllerDemo {
      
       @RequestMapping("/upload.do")
       public String upload(MultipartFilepic,HttpServletRequest req,Model model) throws Exception {
             
               if(!pic.isEmpty()) {
                   //获取服务器上传的文件路径
                   String path =req.getServletContext().getRealPath("/upload");
                   //获取文件名称
                   String filename =pic.getOriginalFilename();
                   //限制文件上传的类型
                   if ("image/png".equals(pic.getContentType())||"image/jpeg".equals(pic.getContentType())||"image/jpg".equals(pic.getContentType())) {
                       File file = new File(path, filename);
                       //完成文件上传
                       pic.transferTo(file);
                       model.addAttribute("path", "/upload"+"/"+filename);
                       return"showUpload";
                   }
               }
              return"../upload";
       }
 
      
}

Spring MVC提供了MultipartFile类型来接收文件类型的参数,MultipartFile是一个接口,提供了一些操作文件的方法:

getOriginalFilename() 获取上传文件的文件名

isEmpty() 用于判断是否有文件上传,如果有文件上传返回true

getContentType() 获取上传文件类型 transferTo(File file) 将文件上传写入磁盘。

getName() 获取表单中input标签里的name属性值。

getBytes() 以byte数组的形式返回上传文件。

getInputStream() 返回上传文件的InputStram对象。

req.getServletContext().getRealPath("/upload")用于获取上传文件被存放的目录,其中getRealPath中的路径相对于应用的webapp目录算起的,不要搞错了噢。

修改pom.xml引入commons相关依赖:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<dependency>
              <groupId>commons-io</groupId>
              <artifactId>commons-io</artifactId>
              <version>2.6</version>
       </dependency>
 
 
       <dependency>
              <artifactId>commons-fileupload</artifactId>
              <groupId>commons-fileupload</groupId>
              <version>1.3.3</version>
       </dependency>
  </dependencies>

修改spring-servlet.xml增加配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<bean id="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!--设置字符编码防止文件名乱码-->
    <property name="defaultEncoding"value="utf-8"/>
    <!--设置上传文件的总大小,单位是字节b-->
    <property name="maxUploadSize"value="2048576"/>
    <!--设置内存缓冲区的大小,当超过该值的时候会写入到临时目录-->
    <property name="maxInMemorySize"value="2048576"/>
    <!--设置临时目录-->
    <property name="uploadTempDir"value="temp"/>
    <!--默认是false,如果设置为true的话,不会将文件路径去除-->
    <property name="preserveFilename"value="false"/>
    <!--是否使用懒加载,默认是false-->
    <property name="resolveLazily"value="true"/>
</bean>

启动应用,访问http://127.0.0.1/upload.jsp。蘑菇头,赶紧选择一张好看的图片,上传吧。

当上传的文件文件超出配置时指定的大小,应用程序会抛出异常——MaxUploadSizeExceededException。我们之前已经学习过SpringMVC的相关异常处理了,这里就不再重复讲了。

上传多个文件与单个文件最主要的区别是在于,Controller中接收文件的参数类型为MultipartFile的数组,即MultipartFile[] 并且需要加上annotation——@RequestParam。上传多个文件的页面input标记要设置相同的name属性值。我们看下面这个例子:

编写用于上传的jsp页面 uploadMultiFile.jsp

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<%@ page language="java" contentType="text/html;charset=utf-8"
    pageEncoding="utf-8"isELIgnored="false"%>
<!DOCTYPE html >
<html>
<head>
<title>Spring MVC 文件上传样例</title>
 
</head>
<body>
   <form action="uploadMultiFile.do"enctype="multipart/form-data" method=post id="picForm">
    <lable>请选择需要上传的文件:</lable>
      <input type="file"name="pics" id=""pic""/><br />
       <input type="file"name="pics" id=""pic""/><br />
    
      <input type="submit"value="提交" id="submit"/><br />
   </form>
</body>
</html>

编写Controller代码,在UploadFileControllerDemo中新增方法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   @RequestMapping("/uploadMultiFile.do")
       public String uploadMultiFile(@RequestParam("pics") MultipartFile[] pics, HttpServletRequest req,
                     Model model) throws Exception {
 
              if (null != pics || pics.length < 2) {
                     List<String> paths= new LinkedList<String>();
                     for (MultipartFile pic : pics) {
                            // 获取服务器上传的文件路径
                            String path =req.getServletContext().getRealPath("/upload");
                            // 获取文件名称
                            String filename =pic.getOriginalFilename();
                            // 限制文件上传的类型
                            if ("image/png".equals(pic.getContentType())
                                          || "image/jpeg".equals(pic.getContentType())
                                          || "image/jpg".equals(pic.getContentType())) {
                                   File file = new File(path, filename);
                                   // 完成文件上传
                                   pic.transferTo(file);
                                   paths.add("/upload" + "/" +filename);
                                  
 
                            }
                    
                     }
                     model.addAttribute("paths", paths);
                     return"showUploadMultiFile";
                    
              }
              return"../uploadMultiFile";
       }

再次强调一下,@RequestParam("pics") MultipartFile[] 注意参数类型 和annotation的值,必须和页面input标记的name属性值匹配!

启动应用,访问http://127.0.0.1/uploadMultiFile.jsp,上传多个文件试试吧。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 猿人工厂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java Web之SpringMVC 上传文件
根据之前所说,学习一款MVC框架,必须要知道文件怎么上传的,那么今天就来学习一下,SpringMVC是如何进行文件上传的,需要进行哪些配置,代码是如何编写的。 首先是web.xml的配置 <?xml
YungFan
2018/05/03
1.4K0
SpringMVC 实现文件上传
springmvc文件上传 SpringMVC框架提供了MultipartFile对象,该对象表示上传的文件,要求变量名称必须和表单file标签的name属性名称相同。 在springmvc.xml配置文件解析器对象
暴躁的程序猿
2022/03/23
6860
【SpringMVC】007-SpringMVC文件上传
①form表单的enctype取值必须是:multipart/form-data;
訾博ZiBo
2025/01/06
620
【SpringMVC】007-SpringMVC文件上传
《SpringMVC从入门到放肆》十五、SpringMVC之上传文件
上一篇我们学习了数据分组校验,已经可以灵活的在项目中进行数据校验了,今天来学习SpringMVC的上传文件功能。相对来说SpringMVC的上传功能,还是比较简单的。
I Teach You 我教你
2019/07/02
4290
SpringMVC文件上传
SpringMVC和Struts2的区别 共同点: 1.都是web层框架,都是基于MVC模型编写 2.底层都离不开原始ServletAPI 3.处理请求的机制都是一个核心控制器
用户3112896
2019/09/26
6260
SpringMVC--文件上传
上篇SpringMVC--SSM整合中整合了SSM三大框架,并进行了接口的编写实现了数据库交互。在后台开发中常用的功能是文件上传,今天来实现后台的文件上传功能:将图片上传,并将服务器存储的文件路径返回给浏览器
aruba
2022/05/25
3970
SpringMVC--文件上传
SpringMVC02之CRUD和文件上传下载
        CRUD是4个单词的首字母,CRUD分别指增加(Create)、读取查询(Retrieve)、更新(Update)和删除(Delete)这4个单词的首字母。
天蝎座的程序媛
2022/11/18
3340
SpringMVC02之CRUD和文件上传下载
SpringMVC上传下载
1、需要导入jar包:ant.jar、commons-fileupload.jar、connom-io.jar。当然spring jar包不可缺少的哦  我这里用的是spring+springmvc+hibernate  可以到官网上直接下载springmvcjar即可
用户7705674
2021/09/23
4790
精通 Spring Boot 系列文(6)
说真的,在 Spring Boot 实现文件下载,真的是方便到让我颤抖。Java 中实现文件上传可以用两个组件:CommonMultipartResolver 和 StandardServletMultipartResolver。
程序员小猿
2021/01/19
3750
精通 Spring Boot 系列文(6)
Spring学习笔记(九)——SpringMVC实现文件上传
SpringMVC实现文件上传 文件上传的必要前提 form 表单的 enctype 取值必须是:multipart/form-data (默认值是:application/x-www-form-urlencoded) enctype:是表单请求正文的类型 method 属性取值必须是 Post 提供一个文件选择域<input type=”file” /> 文件上传的回顾 导入文件上传的jar包 <dependency> <groupId>commons-fileupload</groupId>
不愿意做鱼的小鲸鱼
2022/09/24
3590
Spring学习笔记(九)——SpringMVC实现文件上传
江帅帅:精通 Spring Boot 系列 06
说真的,在 Spring Boot 实现文件下载,真的是方便到让我颤抖。Java 中实现文件上传可以用两个组件:CommonMultipartResolver 和 StandardServletMultipartResolver。
江帅帅
2020/06/17
4380
Spring MVC多种情况下的文件上传
会洗碗的CV工程师
2023/10/14
2200
Spring MVC多种情况下的文件上传
_Spring MVC多种情况下的文件上传
会洗碗的CV工程师
2023/11/18
2680
_Spring MVC多种情况下的文件上传
SpringMVC实现文件上传
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
多凡
2019/11/01
8510
SpringMVC文件上传: MultipartResolver接口
SpringMVC 为文件上传提供了直接的支持, 即 MultipartResolver接口 MultipartResolver接口
Java_慈祥
2024/08/06
1810
基于SpringMVC的上传和下载
注意:form的一个属性值     enctype="multipart/form-data"
CBeann
2023/12/25
1360
基于SpringMVC的上传和下载
SpringMVC上传文件的 4 种方式,你都会么?| SpringMVC第6篇
springmvc 系列中的测试案例,基本上都是使用 idea 中的 http client 插件开发的,是一款非常高效的接口测试工具,还没有用过的,建议先去了解下用法:idea 中的接口测试利器(http cient 插件)
路人甲Java
2021/06/25
3.3K0
SpringMVC上传文件的 4 种方式,你都会么?| SpringMVC第6篇
Maven+SpringMVC+MyBatis 上传图片
  上传文件我一直都觉得很难,好吧,所有涉及文件操作的我都觉得不容易。然后今天尝试了从网页上传图片保存到服务器。这个例子的前提是搭建好了服务器端框架:Maven+Spring MVC+MyBatis。当然必要的准备我也要提及。   首先是jar包,上传文件必不可少的jar包:commons-fileupload和commons-io。这两个是apache的开源jar包。   Maven配置: <dependency> <groupId>commons-fileupload</groupId>
用户1737026
2018/05/17
1.1K0
maven 项目 springMVC实现文件图片的上传下载功能详解(源码已提供,小白必看)
文件上传是项目开发中最常见的功能之一 ,springMVC 可以很好的支持文件上传,但是SpringMVC上下文中默认没有装配MultipartResolver,因此默认情况下其不能处理文件上传工作。如果想使用Spring的文件上传功能,则需要在上下文中配置MultipartResolver。
一写代码就开心
2020/11/19
2K1
maven 项目  springMVC实现文件图片的上传下载功能详解(源码已提供,小白必看)
SpringMvc(四)- 下载,上传,拦截器
1.通过session获取上下文对象(session.getServletContext())
化羽羽
2022/10/28
3020
相关推荐
Java Web之SpringMVC 上传文件
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验