我是靠谱客的博主 炙热硬币,最近开发中收集的这篇文章主要介绍SpringMVC实现文件的上传(CommonsMultipartResolver和StanderServletMultipartResolver)1:CommonsMultipartResolver 2:StanderServletMultipartResolver(经常被使用)其他的内容不变实现的功能是相同的结果,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
一定要足够优秀才能堵住悠悠众口。
文件上传功能在SpringMVC中有两种方法(两种不同的处理器)
这篇文章我们将通过这两种方法来实现文件上传功能
1:CommonsMultipartResolver
创建一个新的Maven项目并在项目中进行基础的环境配置
Maven项目基础配置,如果不同可以参考一下
一:在pom.xml中导入我们即将用到的依赖
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
二:创建网页,实现前端出现页面
注意:这里创建的是动态网页
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="/play" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="提交">
</form>
</body>
</html>
三:创建SpringMVC框架的控制器
package fileupload_demo1;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;
@Controller
public class CT1 {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("/yyyy/MM/dd/"); //创建日期,并标注时间显示格式
@GetMapping("/upload")
public String play1(){
return "hh";
}
@RequestMapping("/play")
@ResponseBody
public String play1(MultipartFile file, HttpServletRequest req) throws IOException {
String format = simpleDateFormat.format(new Date()); //获取今天的日期
String realpath = req.getServletContext().getRealPath("/img") +format; //获取Tomcat中的临时储存文件
File folder = new File(realpath);
if(!folder.exists()){ //检查目录是否存在
folder.mkdirs(); //目录不存在进行创建
}
String oldname = file.getOriginalFilename(); //得到上传时的文件名
String name = UUID.randomUUID().toString()+oldname.substring(oldname.lastIndexOf(".")); //UUID.randomUUID().toString():Java中自动生成主键的方法,机器中生成的一串生成数字
file.transferTo(new File(folder,name)); //将前端传来的数据保存指定名字保存在指定文件夹下
String url = req.getScheme()+ "://"+req.getServerName() +":"+req.getServerPort() +"/img" +format +name;
return url;
//http://localhost:8080/img/2022/11/13/8d3910d1-2a7c-47ce-8251-3cc4eeaf0bc4.jpeg
}
}
注意:下面标注了代码获取的结果
四:配置SpringMVC
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 创建组件扫描功能-->
<context:component-scan base-package="fileupload_demo1"></context:component-scan>
<mvc:annotation-driven/>
<!--默认情况下,静态资源是被拦截的,需要修改这种射中-->
<mvc:resources mapping="/**" location="/"></mvc:resources>
<!--配置文件上传所需要的类,并进行参数配置-->
<bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver" id="multipartResolver">
<!--默认的编码-->
<property name="defaultEncoding" value="UTF-8"/>
<!--上传的总文件大小-->
<property name="maxUploadSize" value="1048576"/>
<!--上传的单个文件大小-->
<property name="maxUploadSizePerFile" value="1048576"/>
<!--内存中最大的数据量,超过这个数据量,数据就要开始往硬盘中写了-->
<property name="maxInMemorySize" value="4096"/>
<!--临时目录,超过 maxInMemorySize 配置的大小后,数据开始往临时目录写,等全部上传完成后,再将数据合并到正式的文件上传目录-->
<property name="uploadTempDir" value="file:///E:\tmp"/>
</bean>
<!--配置视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="modelAndView">
<property name="prefix" value="/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
执行项目:
前端网页:
点击提交,返回图片url
最终结果:
2:StanderServletMultipartResolver(经常被使用)
这种方法的配置基本上与第一种方法相同,没有很大的区别
区别一:将SpringMVC的配置文件中文件上传的类进行更换
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 创建组件扫描功能-->
<context:component-scan base-package="fileupload_demo1"></context:component-scan>
<mvc:annotation-driven/>
<mvc:resources mapping="/**" location="/"></mvc:resources>
<bean class="org.springframework.web.multipart.support.StandardServletMultipartResolver" id="multipartResolver"></bean>
<!--配置视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="modelAndView">
<property name="prefix" value="/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
区别二:将上传文件的参数配置放在web.xml中
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!-- 配置spring框架的基础内容-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- springmvc的配置内容-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:SpringMVC.xml</param-value>
</init-param>
<!--第二种文件上传方法中的参数配置-->
<multipart-config>
<!--文件保存的临时目录,这个目录系统不会主动创建-->
<!-- <location>D:\temp</location>-->
<!--上传的单个文件大小-->
<max-file-size>1048576</max-file-size>
<!--上传的总文件大小-->
<max-request-size>1048576</max-request-size>
<!--这个就是内存中保存的文件最大大小-->
<file-size-threshold>4096</file-size-threshold>
</multipart-config>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<filter>
<filter-name>encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceRequestEncoding</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>forceResponseEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
其他的内容不变实现的功能是相同的结果
最后
以上就是炙热硬币为你收集整理的SpringMVC实现文件的上传(CommonsMultipartResolver和StanderServletMultipartResolver)1:CommonsMultipartResolver 2:StanderServletMultipartResolver(经常被使用)其他的内容不变实现的功能是相同的结果的全部内容,希望文章能够帮你解决SpringMVC实现文件的上传(CommonsMultipartResolver和StanderServletMultipartResolver)1:CommonsMultipartResolver 2:StanderServletMultipartResolver(经常被使用)其他的内容不变实现的功能是相同的结果所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复