当前位置: 首页 > news >正文

SpringBoot实现单文件上传

一、在springBoot项目中的pom.xml添加依赖。

 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>

二、在资源目录下的static目录下中创建一个upload.html的表单文件:

文件的内容如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>图片上传页面</title>
</head>
<body>
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="uploadFile" value="请选择文件">
<input type="submit" value="上传">
</form>
</body>
</html>

接口是/upload,请求方式是post

三、创建文件上传处理接口:

package org.sang.cc;import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;import javax.servlet.http.HttpServletRequest;import org.springframework.util.ResourceUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;@RestController
public class FileUploadController {SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd");@PostMapping("/upload")public String upload(MultipartFile uploadFile,HttpServletRequest req){try {//String realPath=req.getSession().getServletContext().getRealPath("/");String realPath=ResourceUtils.getURL("classpath:").getPath();		String format=sdf.format(new Date());System.out.println("realPath:"+realPath+"static/"+format);File folder=new File(realPath+"static/"+format);if(!folder.isDirectory()){folder.mkdirs();}String oldName=uploadFile.getOriginalFilename();String newName=UUID.randomUUID().toString()+oldName.substring(oldName.lastIndexOf("."),oldName.length());uploadFile.transferTo(new File(folder,newName));String filePath=req.getScheme()+"://"+req.getServerName()+":"+req.getServerPort()+"/static/"+format+"/"+newName;return filePath;}catch(IOException e){e.printStackTrace();}return "上传失败!";}
}

将上传的文件存储在static目录下,返回一个路径字符串

四、上传文件配置:

配置application.properties文件内容

spring.servlet.multipart.enabled=true
spring.servlet.multipart.file-size-threshold=0
spring.servlet.multipart.location=E:\\temp
spring.servlet.multipart.max-file-size=1MB
spring.servlet.multipart.max-request-size=10MB
spring.servlet.multipart.resolve-lazily=false
  • 配置上传文件的临时保存位置为E:\temp
  • 配置单文件最大上传大小为1MB
  • 多文件时总大小为10MB

五、测试:

上传页

上传完成页

展示图片页

物理保存目录

相关文章:

SpringBoot实现单文件上传

一、在springBoot项目中的pom.xml添加依赖。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency> 二、在资源目录下的static目录下中创建一个upload.html的表单文件…...

rust中解决DPI-1047: Cannot locate a 64-bit Oracle Client library问题

我们在使用rust-oracle crate连接oracle进行测试的过程中&#xff0c;会发现无法连接oracle&#xff0c;测试运行过程中抛出“DPI-1047: Cannot locate a 64-bit Oracle Client library”错误。该问题是由于rust-oracle需要用到oracle的动态连接库&#xff0c;我们通过安装orac…...

YOLOv11(Ultralytics)视频选定区域目标统计计数及跟踪

在计算机视觉的众多应用场景中&#xff0c;对特定区域的目标进行检测、跟踪与计数是一个常见且重要的需求。无论是在智慧交通中统计通过特定路口的车辆数量&#xff0c;还是在零售分析中追踪进入特定区域的顾客行为&#xff0c;这一功能都发挥着不可或缺的作用。 随着深度学习…...

24小时自动监控,自动录制直播蓝光视频!支持抖音等热门直播软件

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 工具特点📒📝 使用🎈 获取方式 🎈⚓️ 相关链接 ⚓️📖 介绍 📖 对于许多直播爱好者和内容创作者而言,错过心爱的直播或难以搜集视频素材始终是一个难题。今天,给大家分享的这款工具可以轻松解决这个问题,它拥有…...

InfiniBand(IB)快速上手

什么是IB&#xff1a; InfiniBand&#xff08;直译为“无限带宽”技术&#xff0c;缩写为IB&#xff09;是一个用于高性能计算的计算机网络通信标准&#xff0c;它具有极高的吞吐量和极低的延迟&#xff0c;用于计算机与计算机之间的数据互连。InfiniBand也用作服务器与存储系…...

D74【 python 接口自动化学习】- python 基础之HTTP

day74 http基础定义 学习日期&#xff1a;20241120 学习目标&#xff1a;http定义及实战 -- http基础介绍 学习笔记&#xff1a; HTTP定义 HTTP 是一个协议&#xff08;服务器传输超文本到浏览器的传送协议&#xff09;&#xff0c;是基于 TCP/IP 通信协议来传递数据&…...

移动光猫[HS8545M5-10]获取超密

移动光猫[HS8545M5-10]获取超级密码 1、缘由2、前期准备2.1、确保本地开通telnet客户端功能2.2、准备好相关软件 3、开始查找超密 1、缘由 最近想折腾一下ipv6ddns打通内外网&#xff0c;查询资料说是需要将光猫桥接到外网&#xff1b;但是使用光猫后边的用户名密码根本就找不到…...

原生JS和CSS,HTML实现开屏弹窗

开屏弹窗常应用于打开游戏&#xff0c;或者打开网站的时候&#xff0c;跳出来在正中间&#xff0c;来显示一些信息&#xff0c;并可以设置今日不再显示 CSS代码如下 <style>#box {width: 100vw;height: 100vh;background-color: rgba(0, 0, 0, 0.2);position: relative…...

vue--制作购物车

&#x1f914;如何制作出下列效果呢&#xff1f;&#x1f447; &#x1f636;‍&#x1f32b;️首先: 设置css样式&#xff1a; <style>body {font-family: Arial, sans-serif;}.cart-item {width: 50%;margin-bottom: 15px;padding: 10px;border: 2px solid gray;borde…...

深度测评腾讯云 HAI 智算服务:高性能 AI 计算的新标杆

本文 一、引言二、产品功能深度解析2.1 多样化的 GPU 配置选择2.2 预配置开发环境示例&#xff1a; 2.3 实时性能监控 三、核心技术特点与优势3.1 云端弹性扩展3.2 高性能计算架构 四、实际测试与代码案例4.1 NLP 案例&#xff1a;使用 BERT 进行情感分类数据集&#xff1a;IMD…...

MQ重复消费与消息顺序

如何避免消息重复消费 RocketMQ&#xff1a;给每个消息分配了一个MessageID。这个MessageID就可以作为消费者判断幂等的依据。这种方式不太建议&#xff0c;原因是在高并发场景下这个MessageID不保证全局唯一性。 最好由业务方创建一个与业务相关的全局唯一的ID来区分消息&am…...

应用商店双弹窗“APP在向用户申请权限时未同步告知用户申请此权限的理由”驳回uni-app应用上线的解决方法

目录 问题分析 解决方法 下载插件包&#xff1a;x-perm-apply-instr 将插件包导入进你项目中的uni_modules文件夹 在项目中的main.js文件中添加以下代码 完成 其它注意事项 addPermisionInterceptor 添加 uniApi 调用拦截 removePermisionInterceptor 移除 uniApi 调用…...

第 32 章 - Go语言 部署与运维

在Go语言的应用开发中&#xff0c;部署与运维是一个非常重要的环节。它不仅关系到应用能否顺利上线&#xff0c;还直接影响到应用的性能、安全性和可维护性。以下是根据您的需求整理的关于Go语言应用的打包和发布、容器化部署、监控和日志管理的相关内容。 1. 应用的打包和发布…...

噪杂环境离线语音通断器效果展示

介于之前的离线语音通断器模块的使用环境大部分为噪音比较小的环境中&#xff0c;部分客户对环境提出了更高的要求&#xff0c;能在噪杂、室外或者有一定的噪音的车内使用的模块开发需求被提高到了一个新的层次。最近找到某些能支持室外噪杂环境使用的芯片和模组&#xff0c;打…...

【django】扩展

1. Promise 1.1 对象和状态 是什么&#xff1f;是前端开发时js中的一个对象&#xff08;包裹&#xff09;。【对象】【异步请求】# 对象中有一个状态的值&#xff0c;status # 创建对象&#xff0c;不赋值&#xff0c;statuspendding let v1 new Promise(function(resolve, …...

逆向破解识别基础

找main函数&#xff1a; &#xff08;使用OllyDbg软件&#xff09; 方法一&#xff1a; 因为main函数需要三个参数&#xff0c;所以遇到三个参数加一个调用&#xff0c;那么可能是main函数。 方法二&#xff1a; 如果main函数中有字符串或者调用函数等一些唯一标识&#x…...

MFC 下拉框显示问题和控件自适应窗口大小

在mfc开发过程中&#xff0c;遇到了下拉框的两个问题&#xff0c;现在记录一下 1、把下拉框点开显示不全我放进去的多条文本 解决办法&#xff1a;把鼠标放到下拉框的倒三角去点一下&#xff0c;鼠标就会变成双向箭头&#xff0c;或者先选中一下下拉框再把鼠标移动到倒三角上去…...

Docker 的存储驱动及其优缺点

Docker 的存储驱动是容器文件系统的关键组成部分&#xff0c;决定了容器镜像和数据的存储方式。以下是常见的存储驱动及其优缺点&#xff1a; 1. OverlayFS/Overlay2 简介: Overlay 是现代 Linux 文件系统中一种高效的联合文件系统&#xff0c;Overlay2 是其改进版本&#xff0…...

单片机系统的性能指标有哪些?

单片机系统的性能指标涵盖了多个方面&#xff0c;这些指标共同决定了系统的整体性能。以下是单片机系统中常见的性能指标&#xff1a; 1. 处理器性能指标 1.1 时钟频率&#xff08;Clock Frequency&#xff09; 定义&#xff1a;处理器内核工作的时钟频率&#xff0c;通常以…...

波点音乐自动点击

波点音乐 import uiautomator2 as u2 import time import sys import os# 动态点击时间&#xff0c;打印剩余时间 def dynamic_sleep(seconds):wait_time secondsfor i in range(wait_time):print(f"Waiting... {wait_time - i} seconds remaining")sys.stdout.flu…...

HTTP 消息结构

HTTP 消息结构 1. 引言 超文本传输协议(HTTP)是互联网上应用最广泛的协议之一,它定义了客户端和服务器之间交换数据的格式和规则。HTTP消息是客户端和服务器之间通信的基本单位,包括请求消息和响应消息两种类型。本文将详细介绍HTTP消息的结构,包括其组成部分和格式。 …...

ESP32学习笔记_Bluetooth(1)——蓝牙技术与 BLE 通信机制简介

摘要(From AI): 这篇笔记详细讲解了蓝牙技术的分类、核心架构和通信流程&#xff0c;重点介绍了低功耗蓝牙&#xff08;BLE&#xff09;的协议栈、角色划分及连接机制&#xff0c;结合拓扑示例清晰阐述了蓝牙网络配置和操作过程 前言&#xff1a;本文档是本人在《ESP32-C3 物联…...

C0034.在Ubuntu中安装的Qt路径

Qt安装路径查询 在终端输入qmake -v如上中/usr/lib/x86_64-linux-gnu就是Qt的安装目录&#xff1b;...

jdbc学习——SQL注入

SQL注入介绍 SQL注入是通过操作输入来修改事先定义好的SQL语句&#xff0c;用以达到执行代码对服务器进行攻击的方法。 用户登录的本质&#xff1a;执行下面的sql语句 select * from tb_user where username zhangsan and password 123; 发生sql注入的本质 解决SQL注入的方…...

JavaEE-线程安全专题

文章目录 线程安全概述线程安全引入线程不安全原因概述 线程是随机调度的 线程安全概述 线程安全引入 线程安全问题是整个多线程专题的最核心也是最重要的章节, 如果不理解线程的安全, 是无法写出正确的多线程的代码的, 我们之前所写的代码都是在单一的线程环境之下写出的 “…...

Android 设备使用 Wireshark 工具进行网络抓包

背景 电脑和手机连接同一网络&#xff0c;想使用wireshark抓包工具抓取Android手机网络日志&#xff0c;有以下两种连接方法&#xff1a; Wi-Fi 网络抓包。USB 网络共享抓包。需要USB 数据线将手机连接到电脑&#xff0c;并在开发者模式中启用 USB 网络共享。 查看设备连接信…...

物联网无线局域网WiFi开发(一):WiFi智能家居解决方案

一、WiFi智能家居硬件设计 &#xff08;一&#xff09;WiFi智能家居硬件方案 &#xff08;二&#xff09;硬件选型方案 二、WiFi开发环境搭建 &#xff08;一&#xff09;开发环境搭建 虚拟机lubuntu VirtualBox下载地址&#xff1a;https://www.virtualbox.org/wiki/Downl…...

GMAN解读(论文+代码)

一、注意力机制 注意力机制与传统的卷积神经网络不同的是&#xff0c;前者擅长捕获全局依赖和长程关系&#xff0c;权重会动态调整。而后者对于所有特征都使用同一个卷积核。关于更多注意力机制内容&#xff0c;详见&#xff1a; 注意力机制、自注意力机制、多头注意力机制、通…...

速盾:ddos防御手段哪种比较好?高防cdn怎么样?

DDoS&#xff08;分布式拒绝服务&#xff09;攻击是一种威胁网络安全的常见攻击手段。为了保护网站和服务器免受DDoS攻击的影响&#xff0c;许多安全专家和公司开发了各种防御手段。在这篇文章中&#xff0c;我们将重点讨论一种常见的DDoS防御手段——高防CDN&#xff08;内容分…...

Spring:AOP切入点表达式

对于AOP中切入点表达式&#xff0c;我们总共会学习三个内容&#xff0c;分别是语法格式、通配符和书写技巧。 语法格式 首先我们先要明确两个概念: 切入点:要进行增强的方法切入点表达式:要进行增强的方法的描述方式 对于切入点的描述&#xff0c;我们其实是有两中方式的&a…...