SpringBoot通过UUid实现文件上传接口及问题解决

在controller中,添加对应的方法体:

 @PostMapping("/upload")@ResponseBodypublic ApiRestResponse upload(HttpServletRequest httpServletRequest, @RequestParam("file")MultipartFile file) throws IOException {String fileName = file.getOriginalFilename();
//        截取.前面的文件名String suffixName = fileName.substring(fileName.lastIndexOf("."));UUID uuid = UUID.randomUUID();String newFileName = uuid.toString() + suffixName;
//        文件目录File fileDirectory = new File(Constant.FILE_UPLOAD_DIR);
//        文件名,Constant是我定义的常量类,具体内容在后面    File destFile = new File(Constant.FILE_UPLOAD_DIR + newFileName);if(!fileDirectory.exists()){if (!fileDirectory.mkdir()) {throw new PlatformException(PlatformExceptionEnum.MAKEIDR_FAILED);}}try {
//            需要注意,当你在transferTo这个方法中传入了相对路径,该方法会自动为你拼接上一个默认的路径,会导致虽然保存成功,但是你却找不到该文件file.transferTo(destFile);}catch (IOException e){e.printStackTrace();}try{
//            通过getHost方法回显,获得文件名return  ApiRestResponse.success(getHost(new URI(httpServletRequest.getRequestURI()+ "")) + "/files/" + newFileName);}catch (URISyntaxException e) {return ApiRestResponse.error(PlatformExceptionEnum.UPDATE_FAILED);}}

//回显方法

private URI getHost(URI uri){URI effectiveURI;try{effectiveURI = new URI(uri.getScheme(),uri.getUserInfo(),uri.getHost(),uri.getPort(),null,null,null);}catch( URISyntaxException e){effectiveURI = null;}return effectiveURI;
}

Constant的内容,需要注意的是@Value("${file.upload.dir}")中$符号后的是一对{},这里我已经踩过坑了。
 
对应在application.properties中的配置是,需要注意的是从本地计算机中复制过来的地址样式会是D:\src\main...,需要把\改成/,才能被正常读取,否则用这个路径去保存是一定会找不到的。另外结尾也要记得加上/,因为代码中是直接将地址和文件名拼接在一起,然后保存的,所以需要加上/。

注意的是,代码中还没有包含对静态资源的映射,需要添加一个config实现,缺少这个会影响保存后的显示

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

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

相关文章

工业项目中你连PLM系统都没见过?

什么是 PLM 软件? PLM 软件是用于管理全球供应链中产品或服务全生命周期环节的解决方案。它包括从物料、零部件、产品、文档、规定、工程变更单到质量工作流的数据管理。 PLM 的发展历史 从最初的产品设计管理到如今的数字化转型和智能化生产,PLM 在不断…

tkinter窗口组件Entry

from tkinter import * 创建主窗口 app Tk() 设置窗口大小为1040x2048(手机) app.geometry(“1040x2048”) 设置窗口背景为灰色 app.configure(bg“gray”) 定义一个函数text(),用于处理输入框内容的变化 def text(): # 获取输入框e1的内容 if e1.get() “…

2024年阿里云优惠券领取和使用方法

阿里云优惠代金券领取入口,阿里云服务器优惠代金券、域名代金券,在领券中心可以领取当前最新可用的满减代金券,阿里云百科aliyunbaike.com分享阿里云服务器代金券、领券中心、域名代金券领取、代金券查询及使用方法: 阿里云优惠券…

基于ssm的大学生租房平台的设计与实现(java源码+文档)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的大学生租房平台。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 大学生租房平台的设计与实现的主…

架构设计参考项目系列主题:新零售SaaS架构:客户管理系统架构设计

什么是客户管理系统? 客户管理系统,也称为CRM(Customer Relationship Management),主要目标是建立、发展和维护好客户关系。 CRM系统围绕客户全生命周期的管理,吸引和留存客户,实现缩短销售周期、降低销售成本、增加销售收入的目的,从而提高企业的盈利能力和竞争力。 …

linux——Bash特性

bash是一个命令解释器,其支持命令行展开{}写法 alias是命令别称,即为命令等同于,使用unalias对应命令可以取消该别称 alias可以对命令进行更改

紫光展锐T610平台_4G安卓核心板方案定制开发

紫光展锐T610核心板配备Android 11操作系统,采用12nm制程工艺。该处理器CPU由2颗基于Cortex-A75架构的大核心和6颗基于Cortex-A55架构的小核心组成,最高主频为1.8GHz。GPU采用的是614.4MHz的Mali G52,可以流畅播放2400*1080分辨率视频&#x…

淘宝批量采集商品详情数据(属性丨详情图丨sku丨价格等)

淘宝批量采集商品详情数据(包括属性、详情图、SKU、价格等)可以通过以下几种方式实现: 使用淘宝数据抓取工具:这类工具,如某鱼等,能够自动化采集淘宝商品数据,并将其转换成CSV、Excel等格式&am…

【C++ 学习】 priority_queue 优先队列的学习!!

1 queue****的介绍** 队列是一种容器适配器,专门用于在FIFO上下文(先进先出)中操作,其中从容器一端插入元素,另一端提取元素。 队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特…

DVWA -File Upload-通关教程-完结

DVWA -File Upload-通关教程-完结 文章目录 DVWA -File Upload-通关教程-完结页面功能LowMediumHighImpossible 页面功能 此页面的功能为选择某个图片文件点击Upload按钮上传,上传成功后得知文件上传路径为DVWA\hackable\uploads。 Low 源码审计 这段 PHP 代码…

[面向对象] 单例模式与工厂模式

单例模式 是一种创建模式,保证一个类只有一个实例,且提供访问实例的全局节点。 工厂模式 面向对象其中的三大原则: 单一职责:一个类只有一个职责(Game类负责什么时候创建英雄机,而不需要知道创建英雄机要…

《前端面试题》- JS基础 - 防抖和节流

在界面触发点击,滚动,输入校验等事件时,如果对事件的触发频率不加以限制,会给浏览器增加负担,且对用户不友好。防抖和节流就是针对类似情况的解决方案。 防抖 防抖(debounce):当连续触发事件时&#xff0…

【AIGC】本地部署通义千问 1.5 (PyTorch)

今天想分享一下 Qwen 1.5 官方用例的二次封装( huggingface 说明页也有提供源码),其实没有太多的技术含量。主要是想记录一下如何从零开始在不使用第三方工具的前提下,以纯代码的方式本地部署一套大模型,相信这对于技术…

两步解决 Flutter Your project requires a newer version of the Kotlin Gradle plugin

在开发Flutter项目的时候,遇到这个问题Flutter Your project requires a newer version of the Kotlin Gradle plugin 解决方案分两步: 1、在android/build.gradle里配置最新版本的kotlin 根据提示的kotlin官方网站搜到了Kotlin的最新版本是1.9.23,如下图所示: 同时在Ko…

【软考中级】软件设计师考点分布

文章目录 软考官网资格设置软考报考流程 【软件设计师】考点分布选择题考点分布案例题考点分布 软考官网 中国计算机技术职业资格网:https://www.ruankao.org.cn/ 官网报名平台:https://bm.ruankao.org.cn/sign/welcome 资格设置 计算机软件计算机网…

全栈的自我修养 ———— 如何发布一个npm包?

创建本地仓库 npm init在此期间会让你添加一些版本信息和名称 登陆npm npm login ——> yinhaodada arx.040208发布 npm publish查询

ELK 日志分析系统(一)

一、概念 二、详解 2.1 Elasticsearch 核心概念 2.1.1 接近实时(NRT) 2.1.2 cluster集群 2.1.3 Node节点 2.1.4 index索引 2.1.5 类型(type) 2.1.6 文档(document) 2.1.7 分片和副本(shards & replicas) 2.2 Logstash主要组件 …

OpenHarmony开源三方库的cmake在IDE上直接引用的问题

前言 DevEco Studio的native工程的C/C部分当前只支持cmake脚本的编译,工程的目录结构如下图所示 在工程中引用第三方库有如下三种方式, 一、find_package模式 通过find_package,可以在指定目录下去搜索已安装的库(三方库构建完后…

【cmake安装】研发环境搭建之cmake安装

背景 因为项目需求,需要家里的Win10 PC安装Ubuntu 20.04虚拟机并搭建编译环境,需要安装cmake编译环境 直接命令安装即可 sudo apt install cmake安装成功后: 3.16版本暂时也够用了

编写Markdown时如何爽爽地渲染树?

在使用VitePress/Dumi等静态网站生成时,一般均支持直接在Markdown中渲染显示Vue/React组件,这给个网站非常丰富极致的表现力,我们在创建静态网站时开心的使用各种Vue/React组件,但是在输出树结构时,实际场景中存在几个…