springmvc实现文件上传功能

第一:
@RequestMapping("/testUp")
public String testUp(MultipartFile photo, HttpSession session) throws IOException {//获取上传的文件的文件名String fileName = photo.getOriginalFilename();//获取上传的文件的后缀名String suffixName = fileName.substring(fileName.lastIndexOf("."));//将UUID作为文件名String uuid = UUID.randomUUID().toString().replaceAll("-","");//将uuid和后缀名拼接后的结果作为最终的文件名fileName = uuid + suffixName;//通过ServletContext获取服务器中photo目录的路径ServletContext servletContext = session.getServletContext();String photoPath = servletContext.getRealPath("photo");File file = new File(photoPath);//判断photoPath所对应路径是否存在if(!file.exists()){//若不存在,则创建目录file.mkdir();}String finalPath = photoPath + File.separator + fileName;//上传文件photo.transferTo(new File(finalPath));return "success";
}
@RequestMapping("/testUp") 注解指定了该方法用于处理HTTP请求,并将请求路径映射为"/testUp"。MultipartFile photo 参数用于接收上传的文件,通过photo.getOriginalFilename()获取上传文件的文件名。通过截取文件名的最后一个"."后的字符串,可以获取上传文件的后缀名。使用UUID生成一个唯一的字符串,并将后缀名拼接在后面,作为最终的文件名。通过HttpSession的getServletContext()方法获取服务器中photo目录的路径。创建一个File对象,表示photo目录,如果目录不存在,则使用file.mkdir()方法创建目录。将最终的文件路径拼接为photoPath + File.separator + fileName。使用photo.transferTo(new File(finalPath))将上传的文件保存到最终路径中。方法返回字符串"success",可能用于跳转到成功页面或其他相关操作。这段代码实现了一个简单的文件上传功能,将上传的文件保存到服务器的photo目录中,并使用UUID生成一个唯一的文件名。通过MultipartFile对象的transferTo()方法,将上传的文件保存到最终路径中。第二:
<!--配置文件上传解析器,将上传的文件封装为MultipartFile-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean>
  • 这段XML配置代码使用了Spring框架中的CommonsMultipartResolver类来实现文件上传解析器的配置。
  • 通过将该解析器配置为一个Spring的Bean,可以在处理请求时自动将上传的文件封装为MultipartFile对象。
  • CommonsMultipartResolver是Spring框架提供的一个常用的文件上传解析器,它基于Apache Commons FileUpload库实现了文件上传的功能。
  • 通过配置该解析器,可以方便地在Spring MVC中处理文件上传的请求。

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

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

相关文章

Mysql or与in的区别

创建一个表格 内涵一千万条数据 这张表中&#xff0c;只有id有建立索引&#xff0c;且其余都没有 测试1&#xff1a;使用or的情况下&#xff0c;根据主键进行查询 可以看到根据主键id进行or查询 花费了30-114毫秒&#xff0c;后面30多毫秒可能是因为Mysql的Buffer Pool缓冲池的…

JAVA面试大全之架构篇

目录 1、架构基础 1.1、如何理解架构的演进? 1.2、如何理解架构的服务化趋势? 1.3、架构中有哪些技术点? 2、缓存

#设计模式#3.1用做松鼠桂鱼来理解抽象工厂(对象创建型模式)

概念&#xff1a;xx工厂&#xff0c;xx产品 区分 工厂是动作&#xff0c;产品是结果&#xff08;菜品&#xff09; 概念&#xff1a;抽象xx&#xff0c;具体xx 区分 抽象产品&#xff1a;“中式菜品” 具体产品&#xff1a;“麻婆豆腐”、“宫保鸡丁” 抽象工厂&#xff1a;“…

ubuntu制作deb安装包

这篇文章很好 https://blog.csdn.net/weixin_51495377/article/details/132797013 使用脚本来控制的好处是比较灵活与功能强大 这里附上我的脚本 #!/bin/sh set -e echo "Installing My pd_sns Application..." cp -r ../application/lib/cartographer_ros/* /home…

大模型重塑电商,淘宝、百度、京东讲出新故事

配图来自Canva可画 随着AI技术日渐成熟&#xff0c;大模型在各个领域的应用也越来越深入&#xff0c;国内互联网行业也随之进入了大模型竞赛的后半场&#xff0c;开始从“百模大战”转向了实际应用。大模型从通用到细分垂直领域的跨越&#xff0c;也让更多行业迎来了新的商机。…

对象新增属性为什么不更新?

data () {return {obj: {a: 1}} }methods: {update () {this.obj.b 2} } 上面的伪代码&#xff0c;当我们执行 update 更新 obj 时&#xff0c;我们预期视图是要随之更新的&#xff0c;实际是并不会 这个其实很好理解&#xff0c;我们先要明白 vue 中 data init 的时机&am…

P1629 邮递员送信

题目描述 有一个邮递员要送东西&#xff0c;邮局在节点 1。他总共要送 n−1 样东西&#xff0c;其目的地分别是节点 2 到节点 n。由于这个城市的交通比较繁忙&#xff0c;因此所有的道路都是单行的&#xff0c;共有 m 条道路。这个邮递员每次只能带一样东西&#xff0c;并且运…

【Vue3源码学习】— CH2.6 effect.ts:详解

effect.ts&#xff1a;详解 1. 理解activeEffect1.1 定义1.2 通过一个例子来说明这个过程a. 副作用函数的初始化b. 执行副作用函数前c. 访问state.countd. get拦截器中的track调用e. 修改state.count时的set拦截器f. trigger函数中的依赖重新执行 1.3 实战应用1.4 activeEffect…

LLM推理入门指南②:深入解析KV缓存

在本系列文章《LLM推理入门指南①&#xff1a;文本生成的初始化与解码阶段》中&#xff0c;作者对Transformer解码器的文本生成算法进行了高层次概述&#xff0c;着重介绍了两个阶段&#xff1a;单步初始化阶段&#xff0c;即提示的处理阶段&#xff0c;和逐个生成补全词元的多…

FreeRTOS作业day1

使用定时器2让黄灯闪烁 核心代码 man.c HAL_TIM_Base_Start_IT(&htim1);//以中断的方式打开定时器1&#xff0c;定时器开始工作计数&#xff0c;当时间到达500ms后&#xff0c;执行中断回调函数 HAL_TIM_Base_Start_IT(&htim2);//以中断的方式打开定时器2&#xff0…

pytorch中torch.stack()用法虽简单,但不好理解

函数功能 沿一个新维度对输入一系列张量进行连接&#xff0c;序列中所有张量应为相同形状&#xff0c;stack 函数返回的结果会新增一个维度。也即是把多个2维的张量凑成一个3维的张量&#xff1b;多个3维的凑成一个4维的张量…以此类推&#xff0c;也就是在增加新的维度上面进…

浪潮信息AIStation与潞晨科技Colossal-AI 完成兼容性认证!

为进一步提升大模型开发效率&#xff0c;近年来&#xff0c;浪潮信息持续加强行业合作&#xff0c;携手业内头部&#xff0c;全面进攻大模型领域。日前&#xff0c;浪潮信息AIStation智能业务创新生产平台与潞晨科技Colossal-AI大模型开发工具完成兼容性互认证。后续&#xff0…

如何使用 RabbitMQ 进行消息的发送和接收

1、创建连接工厂&#xff1a; ConnectionFactory factory new ConnectionFactory(); factory.setHost("localhost"); // 设置 RabbitMQ 服务器的主机地址 Connection connection factory.newConnection(); // 创建连接 Channel channel connection.createChannel…

性能测试VS负载测试VS压力测试

性能测试 性能测试的目的不是去找bugs,而是排除系统的瓶颈,以及为以后的回归测试建立一个基准。而性能测试的操作,实际上就是一个非常小心受控的测量分析过程。在理想的情况下,被测软件在这个时候已经是足够稳定了,所以这个过程得以顺利的进行。 一组清晰已定义好的…

FFmpeg将绿幕视频处理成透明视频播放

怎么在网页端插入透明视频呢&#xff0c;之前在做Web3D项目时&#xff0c;使用threejs可以使绿幕视频透明显示在三维场景中&#xff0c;但是在网页端怎么让绿幕视频透明显示呢&#xff1f; 如图上图&#xff0c;视频背景遮挡住后面网页内容 想要如下图效果 之前有使用过ffmpeg…

机器人码垛机:智能仓储系统的重要组成部分

随着科技的飞速进步&#xff0c;机器人技术已经渗透到了许多行业领域&#xff0c;其中&#xff0c;仓储业尤为显著。机器人码垛机作为智能仓储系统的重要组成部分&#xff0c;不仅提高了码垛效率&#xff0c;还降低了人工成本和安全风险。然而&#xff0c;在其广泛应用的同时&a…

HTML5 和 CSS3 提高

一、HTML5 的新特性 HTML5 的新增特性主要是针对于以前的不足&#xff0c;增加了一些新的标签、新的表单和新的表单属性等。这些新特性都有兼容性问题&#xff0c;基本是 IE9 以上版本的浏览器才支持&#xff0c;如果不考虑兼容性问题&#xff0c;可以大量使用这些新特性。 声明…

NineAi3.5 –支持GPT绘图,语音播报,联网访问,上下文关联,语音模式

NineAi3.5 –支持GPT绘图&#xff0c;语音播报&#xff0c;联网访问&#xff0c;上下文关联&#xff0c;语音模式 基于ChatGPT开发的一个人工智能技术驱动的自然语言处理工具&#xff0c;它能够通过学习和理解人类的语言来进行对话&#xff0c; 还能根据聊天的上下文进行互动&…

Vue3之setup方法

Vue 3 的 setup 方法是 Vue Composition API 的一部分&#xff0c;用于组织和复用 Vue 组件的逻辑代码。Vue Composition API 允许您以更具响应性和函数式的方式来组织和复用 Vue 组件中的代码&#xff0c;特别是在处理复杂逻辑或跨组件共享逻辑时非常有用。 以下是关于 setup…

Java NIO详解

一、概念 NIO, 即new io&#xff0c;也叫非阻塞io 二、NIO三个核心组件&#xff1a; Buffer数据缓冲区Channel通道Selector选择器 1、Buffer缓冲区 缓冲区本质上是一个可以存放数据的内存块&#xff08;类似数组&#xff09;&#xff0c;可以在这里进行数据写入和读取。此…