Springboot 文件上传下载相关问题

文章目录

  • 关于Springboot 文件上传下载问题解决方案
    • 注意事项
    • 文件上传
    • 文件下载
    • 文件删除
    • 文件在线打开
    • 在写练习的时候,发现了一些小小的问题,已经在 上述代码中体现。
      • ① 代码路径碰到中文的时候,会有乱码,需要转换(内容中已解决)
      • ② 在下载文件的时候,无需转跳问题(内容中已解决)

关于Springboot 文件上传下载问题解决方案

我觉得最好的办法就是将这些代码先写一遍出来,然后再琢磨一下是什么原理,虽然代码有些繁琐

注意事项

在这里插入图片描述

我们可以注意到,这个文件上传 的 enctype 格式必须设置成 “multipart / from-data” 哦。

文件上传

先把需求罗列出来
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

代码如下:

    @PostMapping("/addFile")public String addFile(MultipartFile file,HttpSession request) throws IOException {// 获得旧文件名称String originalName = file.getOriginalFilename();// 获取文件的后缀String ext = "." + FilenameUtils.getExtension(originalName);// 获得新文件名称String newName = new SimpleDateFormat("yyyyMMdd").format(new Date()) + UUID.randomUUID().toString().replace("-","")+ext;// 获得储存的路径String path = ResourceUtils.getURL("classpath:").getPath()+"static/test/";String path1 = URLDecoder.decode(path, "utf-8");// 获取新的文件夹,要是不存在,就默认创建java.io.File files = new java.io.File(path1 + newName);if(!files.exists()) {boolean b = files.mkdirs();};// 获取文件的大小String size = file.getSize() + "kb";// 上传文件file.transferTo(files);File f = new File();f.setId(UUID.randomUUID().toString());f.setOldName(originalName);f.setNewName(newName);f.setExt(ext);f.setPath(path1);f.setSize(size);String houZhui = FilenameUtils.getExtension(originalName);if(houZhui.equals("png") || houZhui.equals("img") || houZhui.equals("jpg")){f.setStyle("是");}else{f.setStyle("否");}f.setImg(path1+newName);f.setDownCounts("0");f.setDownTime(new SimpleDateFormat("yyMMddHHmmss").format(new Date()));com.xiao.entity.User user = (com.xiao.entity.User) request.getAttribute("user");f.setUid(user.getId());filempl.addFiles(f);return "redirect:/selectFiles";}

文件下载

在这里插入图片描述

代码如下:

    @GetMapping("/download")public void downloadFile(@Param("id")String id , HttpServletResponse response) throws IOException {File file = filempl.queryFile(id);// 获取要下载文件的 urlString paths = ResourceUtils.getURL("classpath:").getPath()+"/static/test";//获取文件输入流FileInputStream is = new FileInputStream(new java.io.File(paths,file.getNewName()));// 附件下载response.setHeader("content-disposition","attachment;fileName="+ URLEncoder.encode(file.getOldName(),"utf8"));// 获取输出响应流ServletOutputStream os = response.getOutputStream();IOUtils.copy(is,os);// 关闭流IOUtils.closeQuietly(is);IOUtils.closeQuietly(os);//        问题二:不需要返回,因为是下载,不存在页面转跳问题
//        return "forward:/selectFiles";

文件删除

在这里插入图片描述

代码如下:

    @GetMapping("/delFile")public String delFile(@Param("id")String id) throws IOException {// 根据id查找到当前的User对象File file = filempl.queryFile(id);String id1 =file.getNewName();// 如果文件存在,则删除文件boolean del = Files.deleteIfExists(Paths.get("D:\\javaPorject\\thirdTest\\target\\classes\\static\\test\\"+id1));// mapper 删除文件filempl.delFiles(id);return "forward:/selectFiles";}

文件在线打开

在这里插入图片描述

仅仅多了一个 “ inline; ”,就变成了在线打开。

在写练习的时候,发现了一些小小的问题,已经在 上述代码中体现。

① 代码路径碰到中文的时候,会有乱码,需要转换(内容中已解决)

② 在下载文件的时候,无需转跳问题(内容中已解决)

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

fanuc添加地轨步骤图

机器人选项J518 法兰盘选择 FLANGE TYPE SELECT1 一般 机器人类型选择 TYPE SETTING2 J1运动范围设置 机器人->控制启动

鸿蒙开发的基本技术栈及学习路线

随着智能终端设备的不断普及与技术的进步,华为推出的鸿蒙操作系统(HarmonyOS)迅速引起了全球的关注。作为一个面向多种设备的分布式操作系统,鸿蒙不仅支持手机、平板、智能穿戴设备等,还支持IoT(物联网&…

Java 每日一刊(第13期):this super static

“优秀的代码不仅仅是给机器看的,更是给人看的。” 前言 这里是分享 Java 相关内容的专刊,每日一更。 本期将为大家带来以下内容: this 关键字super 关键字static 关键字 this 关键字 this 关键字是 Java 中最常见的关键字之一&#xf…

科技赋能安全,财谷通助力抖音小店腾飞!

在数字经济的浪潮中,短视频与直播带货已成为新时代的商业风口,抖音小店作为这一领域的佼佼者,正引领着无数小微商家踏上创业与转型的快车道。然而,随着市场的日益繁荣,如何有效管理店铺、提升运营效率、保障交易安全成…

Hadoop-MapReduce的 原理 | 块和片 | Shuffle 过程 | Combiner

MapReduce的原理 简单版本: AppMaster: 整个Job任务的核心协调工具 MapTask: 主要用于Map任务的执行 ReduceTask: 主要用于Reduce任务的执行 一个任务提交Job --> AppMaster(项目经理)--> 根据切片的数量统计出需要多少个MapTask任务 --> 向ResourceMan…

伊犁-linux root 密码忘记咋办

1 root 密码忘记了 或者reboot 重启之后在引导界面 按住 e 进入如下界面 然后按住ctrlx 进入这个界面 root 修改成功

【机器学习(九)】分类和回归任务-多层感知机 (MLP) -Sentosa_DSML社区版

文章目录 一、算法概念二、算法原理(一)感知机(二)多层感知机1、隐藏层2、激活函数sigma函数tanh函数ReLU函数 3、反向传播算法 三、算法优缺点(一)优点(二)缺点 四、MLP分类任务实现…

Hive企业级调优[3]—— Explain 查看执行计划

Explain 查看执行计划 Explain 执行计划概述 EXPLAIN 命令呈现的执行计划由一系列 Stage 组成。这些 Stage 之间存在依赖关系,每一个 Stage 可能对应一个 MapReduce Job 或者一个文件系统的操作等。如果某 Stage 对应了一个 MapReduce Job,则该 Job 在 …

机器翻译之Bahdanau注意力机制在Seq2Seq中的应用

目录 1.创建 添加了Bahdanau的decoder 2. 训练 3.定义评估函数BLEU 4.预测 5.知识点个人理解 1.创建 添加了Bahdanau的decoder import torch from torch import nn import dltools#定义注意力解码器基类 class AttentionDecoder(dltools.Decoder): #继承dltools.Decoder写…

动手学深度学习(五)循环神经网络RNN

一、序列模型 1、统计工具 ①联合概率分布 假设有一个序列 x[x1,x2,…,xT],我们可以把序列的联合概率分解为多个条件概率的乘积。 ②建模 f(x1​,…,xt−1​) 是一个函数,用于提取前 t−1个序列元素的信息。这意味着我们不需要存储每一个之前的序列元…

关于群里脱敏系统的讨论2024-09-20

群里大家讨论脱敏系统,傅同学:秦老师,银行数据脱敏怎么做的,怎么存储的? 采购了脱敏系统,一般是硬件(厂商直接卖的一体机)。这个系统很复杂,大概卖50-100万一台。 最核…

Springboot常见问题(bean找不到)

如图错误显示userMapper bean没有找到。 解决方案: mapper包位置有问题:因为SpringBoot默认的包扫描机制会扫描启动类所在的包同级文件和子包下的文件。注解问题: 比如没有加mapper注解 然而无论是UserMapper所在的包位置还是Mapper注解都是…

HelpLook VS GitBook,在线文档管理工具对比

在线文档管理工具在当今时代非常重要。随着数字化时代的到来,人们越来越依赖于电子文档来存储、共享和管理信息。无论是与团队合作还是与客户分享,人们都可以轻松地共享文档链接或通过设置权限来控制访问。在线文档管理工具的出现大大提高了工作效率和协…

echarts 散点图tooltip显示一个点对应多个y值

tooltip&#xff1a;显示 tooltip: {trigger: "axis",extraCssText: max-width:50px; white-space:pre-wrap,formatter: function (params) {let arr []params.forEach(v > {arr.push(v.data[1])});return params[0].data[0]":<br>["arr.toStr…

leetcode刷题3

文章目录 前言回文数1️⃣ 转成字符串2️⃣ 求出倒序数再比对 正则表达式匹配[hard]1️⃣ 动态规划 盛最多水的容器1️⃣ 遍历分类2️⃣ 双指针贪心 最长公共前缀1️⃣ 遍历&#xff08;zip解包&#xff09; 三数之和1️⃣ 双指针递归 最接近的三数之和1️⃣ 迭代一次双指针 电…

PCL addLine可视化K近邻

目录 一、概述 1.1原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.2完整代码 三、实现效果 PCL点云算法汇总及实战案例汇总的目录地址链接&#xff1a; PCL点云算法与项目实战案例汇总&#xff08;长期更新&#xff09; 一、概述 本文将介绍如何使用PCL库中…

Unreal Engine 5 C++: 编辑器工具编写入门(中文解释)

目录 准备工作 1.创建插件 2.修改插件设置 快速资产操作&#xff08;quick asset action) 自定义编辑器功能 0.创建编辑器button&#xff0c;测试debug message功能 大致流程 详细步骤 1.ctrlF5 launch editor 2.创建新的cpp class&#xff0c;derived from AssetAction…

基于PHP的CRM管理系统源码/客户关系管理CRM系统源码/php源码/附安装教程

源码简介&#xff1a; 这是一款基于PHP开发的CRM管理系统源码&#xff0c;全称客户关系管理CRM系统源码&#xff0c;它是由php源码开发的&#xff0c;还附带了一整套详细的安装教程哦&#xff01; 功能亮点&#xff1a; 1、公海管理神器&#xff1a;不仅能搞定公海类型&…

【自然语言处理】补充:布尔模型

【自然语言处理】补充:布尔模型 布尔检索是指针对查询的检索,布尔查询是指利用AND,OR或者NOT操作符将词项连接起来的查询,例如:信息AND检索、信息OR检索、信息AND检索AND NOT教材 Google的高级搜索/布尔查询 Google的AND—百度 “ 手机 报价 ”Google的NOT—百度 “ 手机…

关于MATLAB计算3维图的向量夹角总是不正确的问题记录

文章目录 问题描述解决方法完整代码 问题描述 因为最近在做无人机的一个项目&#xff0c;所以需要画出无人机的轨迹&#xff0c;然后再提取特征值&#xff0c;我这里在计算夹角的时候发现为什么在视觉上明明看的是钝角但是实际计算出来却是锐角的角度。 如下图所示&#xff0c…