使用spring-webmvc6实现文件上传

news/2024/9/21 0:39:00/文章来源:https://www.cnblogs.com/DuWenjie/p/18299562
  • 使用SpringMVC6版本,不需要添加以下依赖:
<dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.5</version>
</dependency>
  • 新建maven模块springmvc-009,pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>SpringMVC</artifactId><groupId>com.powernode</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>springmvc-009</artifactId><packaging>war</packaging><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target></properties>
<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>6.1.7</version></dependency><dependency><groupId>org.thymeleaf</groupId><artifactId>thymeleaf-spring6</artifactId><version>3.1.2.RELEASE</version></dependency><dependency><groupId>jakarta.servlet</groupId><artifactId>jakarta.servlet-api</artifactId><version>6.1.0</version><!--指定servlet-api有tomcat容器提供,打包时将不会将servlet-api包加入打包中--><scope>provided</scope></dependency><!--   <dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version></dependency>--><!--        <dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.5.3</version></dependency>--></dependencies>
</project>
  • 增加web支持,web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"version="5.0"><!--字符编码过滤器--><filter><filter-name>characterEncodingFilter</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>forceEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>characterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><!--前端控制器--><servlet><servlet-name>dispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:dispatcherServlet-servlet.xml</param-value></init-param><multipart-config><!--支持最大文件大小--><max-file-size>1024000</max-file-size><!--表单中多选的所有文件上传最大值--><max-request-size>1024000</max-request-size><!--设置最小文件上传大小--><file-size-threshold>0</file-size-threshold></multipart-config></servlet><servlet-mapping><servlet-name>dispatcherServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping>
</web-app>

spring配置文件

<?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="com.powernode.springmvc.controller"/><!--视图控制器--><!--视图解析器--><bean id="viewResolver" class="org.thymeleaf.spring6.view.ThymeleafViewResolver"><!--作用于视图渲染过程中,设置视图渲染后输出时采用的编码字符集--><property name="characterEncoding" value="utf-8"/><!--若存在多个视图解析器,配置优先级,值越小优先级越高--><property name="order" value="1"/><property name="templateEngine"><bean class="org.thymeleaf.spring6.SpringTemplateEngine"><property name="templateResolver"><bean class="org.thymeleaf.spring6.templateresolver.SpringResourceTemplateResolver"><!--设置模板文件的位置--><property name="prefix" value="/WEB-INF/templates/"/><!--设置模板文件后缀--><property name="suffix" value=".html"/><!--设置模板类型--><property name="templateMode" value="HTML"/><!--设置模板文件在读取和解析过程中采用的编码字符集--><property name="characterEncoding" value="utf-8"/></bean></property></bean></property></bean><!--视图控制器--><mvc:view-controller path="/" view-name="index"/><!--开启注解驱动--><mvc:annotation-driven/><!--静态资源处理--><mvc:default-servlet-handler/>
</beans>
  • 配置前端首页
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>文件上传与下载</title>
</head>
<body>
<h1>文件上传与下载</h1>
<hr>
<form th:action="@{/fileup}" method="post" enctype="multipart/form-data">文件上传: <input type="file" name="fileName"><br><input type="submit" value="上传">
</form>
</body>
</html>
  • 配置FileController
package com.powernode.springmvc.controller;import jakarta.servlet.ServletContext;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;import java.io.*;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;@RestController
public class FileController {@RequestMapping(value = "/fileup",method = RequestMethod.POST)public String fileup(@RequestParam("fileName") MultipartFile multipartFile, HttpServletRequest request) throws IOException {String name = multipartFile.getName();System.out.println(name);//获取的名字是fineNameString originalFilename = multipartFile.getOriginalFilename();System.out.println(originalFilename);//获取的名字是文件原名Path path = Paths.get(name);System.out.println("path:"+ path);//获取输入流InputStream inputStream = multipartFile.getInputStream();BufferedInputStream bis = new BufferedInputStream(inputStream);//输出流ServletContext servletContext = request.getServletContext();String realPath = servletContext.getRealPath("/upload");File file = new File(realPath);if (!file.exists()){file.mkdirs();}File destFile = new File(file.getAbsolutePath() + "/" + originalFilename);//输出流BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destFile));//一边读一边写byte[] bytes = new byte[1024 * 10];int readCount = 0;while((readCount = bis.read(bytes)) != -1){bos.write(bytes, 0,readCount);}bos.flush();bos.close();bis.close();return "ok";}
}

最后重启tomcat,测试

成功上传到服务器指定地址

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/742788.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于ACO蚁群优化算法的WSN网络路由优化matlab仿真

1.程序功能描述基于ACO蚁群优化算法的WSN网络路由优化,通过蚁群优化迭代,在WSN中搜索一个最短的路由路径。在仿真过程中,实时显示每一次迭代过程中找到的路径,最后输出ACO的优化迭代过程,网络路由路径的搜索结果。2.测试软件版本以及运行结果展示 MATLAB2022a版本运行 3.…

南外c++集训枚举题:关灯

根据标题可知 这道题一定是一道枚举题 这道题考虑使用dfs,处理特殊处理第一层,每次加答案时选最优值。 给出代码:点击查看代码 #include<bits/stdc++.h> using namespace std; int n,m; char mat[20][110]; int dfs(int cnt,int pos,int tmp)//cnt:楼层pos:哪里的楼梯…

WCP知识管理系统-免费版(v5.1.9)

5.1.9版本(最新)下载地址 登录官网查看功能描述 CP知识分享平台V5.1.9版本的更新日志,包含了bug修复、性能优化和新功能的介绍。以下是具体细节: 1. **Bug修复**: - 在纯图片模式下,点击图片后现在会展示原图而非缩略图。 - 帮助主题下的首页缩放后,不再显示下方的大块黑…

Mysql之日常运维命令总结

1、连接MySQL数据库 mysql -uroot -ppassword mysql -uroot -ppassword -h 127.0.0.1 -P 3306 mysql -uroot -ppassword -S /path/to/mysql.sock2、查看当前数据库中的会话状态 show processlist;3、查看当前数据库中的活动会话(排除掉空闲Sleep状态的会话) select * from in…

基于PSO粒子群优化的CNN-GRU的时间序列回归预测matlab仿真

1.算法运行效果图预览 (完整程序运行后无水印)2.算法运行软件版本 matlab2022a3.部分核心程序for i=1:Iterifor j=1:Npeoprng(i+j)if func_obj(x1(j,:))<pbest1(j)p1(j,:) = x1(j,:);%变量pbest1(j) = func_obj(x1(j,:));endif pbest1(j)<gbest1g1 = p1(j,:);%变量…

瓦片地图

1. 预备知识 1.1 参考椭球 地球表面是一个凸凹不平的表面,而对于地球测量而言,地表是一个无法用数学公式表达的曲面,这样的曲面不能作为测量和制图的基准面。假想一个扁率极小的椭圆,绕地球体短轴旋转所形成的规则椭球体称之为地球椭球体。 地球椭球体与地球形体非常接近,…

Profinet转Modbus模块减轻通讯编程工作量实现Modbus通讯

巴图自动化PN转Modbus模块简化Profinet与Modbus设备间通信,减轻编程工作。通过使用巴图自动化Profinet转Modbus模块(BT-MDPN10),用户无需编写复杂的通信程序或进行繁琐的协议转换,只需简单配置通讯参数。巴图自动化PN转Modbus模块(BT-MDPN10)能够实现Profinet协议与Modb…

【服务器搭建】服务器临时授权

#蜜罐 #钓鱼网站场景 服务器上的业务并不想对所有人开放,只有当对方提供IP信息后才单独对相应的IP进行授权。像这种小范围的IP授权,如果能获取到对方IP,则可以通过提前写防火墙策略,限制IP访问范围。但如果IP是动态的,比如对方的IP是互联网IP,这时就只能先等对方报自己的…

提质增效,还看拖拽式报表设计器

如果想实现提质、降本、增效等发展目标,可以随时来了解拖拽式报表设计器的相关优势特点。随着业务量的增大,传统的报表已经无法满足发展需要了,借助于低代码技术平台、拖拽式报表设计器的优势特点,可以助力摆脱信息孤岛、部门之间协作沟通不畅的弊端,实现高效增值的市场价…