spring boot 中图片的上传与访问路径设置,文件的上传与下载

Spring Boot文件上传下载实战:从MultipartFile到大文件分块传输 文件上传与下载是Web应用开发中的基础功能,涉及客户端与服务器之间的数据交换。其核心原理基于HTTP协议,通过multipart/form-data格式对文件进行编码传输。在Java生态中,Spring MVC框架提供了MultipartFile接口作为统一的文件抽象层,极大地简化了开发。这项技术的工程价值在于能够高效、安全地处理用户生成内容、系统间文件交换等场景。针对大文件传输,分块上传与断点续传技术可以有效避免内存溢出和网络中断导致的重传问题。本文聚焦Spring Boot框架,深入解析了Multipa 阅读详情

图片上传示例:

@Slf4j
public class ImageUpload {

    public void saveImage(String base64Url) throws BusinessException {
        MultipartFile multipartFile = null;
        try {
            String[] baseStrs = base64Url.split(",");
            byte[] b = new byte[0];
            b = Base64.decodeBase64(baseStrs[1]);
            for (int i = 0; i < b.length; ++i) {
                if (b[i] < 0) {//调整异常数据
                    b[i] += 256;
                }
            }
            multipartFile = new BASE64DecodedMultipartFile(b, baseStrs[0]);
            //设置图片存储路径
            File imagePath = new File("E:/images/meeting/file");
            if (!imagePath.exists()) {
                imagePath.mkdirs();
            }
            String name = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
            File imageFile = new File(imagePath, name);
            if (imageFile.exists()) {
                imageFile.delete();
            }
            multipartFile.transferTo(imageFile);
        } catch (Exception e) {
            log.info(e.getMessage());
            e.printStackTrace();
        }
    }
}

在application.properties中设置图片访问的路径:

spring.mvc.static-path-pattern=http://ip:post/images/**
spring.resources.static-locations=file:图片真正存储的路径filepath

 

 文件上传示例:

配置文件上传的大小:spring.servlet.multipart.maxFileSize=2MB

编码:

spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
public boolean getSuffixs(String suffixName) {
    String suffix = ".doc/.docx/.pdf";
    HashSet suffixs = new HashSet();
    String[] strs = suffix.split("/");
    for (String str : strs) {
        if (!suffixs.contains(str)) {
            suffixs.add(str);
        }
    }
    if (!suffixs.contains(suffixName)) {
        return false;
    }
    return true;
}

public String fileUpload(@RequestParam("file") MultipartFile file) {
    String filePath = "E:/images/meeting/file/";
    try {
        if (file.isEmpty()) {
            return "文件为空";
        }
        // 获取文件名
        String fileName = new String(file.getOriginalFilename());
        log.info("上传的文件名为:" + fileName);
        // 获取文件的后缀名
        String suffixName = fileName.substring(fileName.lastIndexOf("."));
        log.info("文件的后缀名为:" + suffixName);
        String str = ".doc/.docx/.pdf";
        if (!getSuffixs(suffixName)) {
            return "文件格式不正确,允许上传的文件格式有:";
        }
        // 设置文件存储路径
        String name = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();
        String path = filePath+ name;
        File dest = new File(path, fileName);
        // 检测是否存在目录
        if (!dest.getParentFile().exists()) {
            dest.getParentFile().mkdirs();// 新建文件夹
        }
        file.transferTo(dest);// 文件写入
        String fileDownLoadPath = "http://localhost:8080/file/download/" + name + "/" + fileName;
        return fileDownLoadPath;
    } catch (IllegalStateException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return "文件上传失败";
}

 

文件下载示例:

public String downloadFile(@PathVariable String path, @PathVariable String fileName, HttpServletRequest request,
    HttpServletResponse response) {
    String filePath = "E:/images/meeting/file/";
    // 设置文件名,根据业务需要替换成要下载的文件名
    if (fileName != null) {
        //设置文件路径
        String realPath = filePath + path;
        File file = new File(realPath, fileName);
        //用于解决下载下来的文件名乱码问题
        String userAgent = request.getHeader("User-Agent");
        try {
            if (userAgent.contains("MSIE") || userAgent.contains("Trident")) {
                fileName = java.net.URLEncoder.encode(fileName, "UTF-8");
            } else {
                fileName = new String(fileName.getBytes("UTF-8"), "ISO-8859-1");
            }
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        if (file.exists()) {
            response.setContentType("application/force-download");// 设置强制下载不打开
            response.addHeader("Content-Disposition", "attachment;fileName=" + fileName);// 设置文件名
            byte[] buffer = new byte[1024];
            FileInputStream fis = null;
            BufferedInputStream bis = null;
            try {
                fis = new FileInputStream(file);
                bis = new BufferedInputStream(fis);
                OutputStream os = response.getOutputStream();
                int i = bis.read(buffer);
                while (i != -1) {
                    os.write(buffer, 0, i);
                    i = bis.read(buffer);
                }
                System.out.println("success");
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (bis != null) {
                    try {
                        bis.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if (fis != null) {
                    try {
                        fis.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
        }
    }
    return null;
}

 

Springboot 实现 上传、下载 以及解决必须项目重启才能访问资源的问题 代码很常见也很简单,后面会讲到一些注意点: package com.ilas.testboot.fileUpload; import org.apache.commons.io.FilenameUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annot 阅读详情

相关推荐

Agent Skills:AI智能体规模化落地的基础设施

摘要:AgentSkills体系已成为AI智能体落地的核心基础设施,解决了能力扩展和行业知识沉淀两大核心难题。该开放标准通过语义优先、渐进式披露等设计原则,实现了工具调用的标准化和可控化,同时支持轻量化知识沉淀。Skill作为最小能力单元,将传统软件功能、行业知识等封装为可被智能体调用的标准化模块,推动了软件产业从"工具时代"向"智能体时代"的范式变革。目前该体系已被主流Agent工具广泛兼容,形成完整生态,未来将持续演进,进一步降低落地门槛,推动AI原生转型。

技术引领业务创新 1158

springboot2.0上传文件(视频,图片)到服务器硬盘,并保存路径至mysql,返回可直接访问的url

1.预览: 1.1 1.2   1.3 复制这个url到浏览器: 上传视频的话,复制视频url到浏览器: 2.代码相关部分: 先创建一个表shipins: name:上传的文件名字,lujing:文件在硬盘的路径,url:可直接访问的链接。 idea创建一个springboot项目: 1.pom.xml文件 &lt;?xml version="1.0"...

大海无量的博客 5万+

Truncated SVD for faster dection

Truncated SVD方法最先被提出在《Fast R-CNN》论文中,用于降低全连接层的运算量,提升模型的速度。在卷积神经网络的分类任务中,FC层的运算速度远远大于CONV层,而在Fast R-CNN的目标检测任务中,大多数的运算时间发生在FC 的运算中,是因为针对每张输入图片,只进行一次卷积操作,而要对生成的Region Proposal,大致两千个,进行全连接操作进行分类与Bounding...

weixin_35747666的博客 1535

通过tomcat(http://localhost:8080/)直接访问文件(图片等)

  文章目录向Tomcat添加配置访问直接启动Tomcat通过 IDEA 启动 Tomcat        向Tomcat添加配置 添加配置如下: <Context path="/image" docBase="H:/online/picture" reloadable="true" crossContext="true"></Context> Context标签的属性有: path:指定访问该Web应用的 URL 入口,就是通过 http://lo

qwjy的博客 1万+

jmeter小白下载安装步骤

本文仅仅简单介绍了jmeter工具的下载安装,以及基础的操作步骤。

昔年@曦的博客 3492

二相混合式步进电机闭环矢量控制simulink仿真(含仿真文件)

在位置跟踪伺服系统中二相混合式步进电机闭环矢量控制simulink仿真

qq_39023633的博客 2万+

菜鸟的springboot项目图片上传及图片路径分析

菜鸟的springboot项目图片上传及图片路径分析说明一、图片路径分析二、实现图片上传(1)单文件上传(非异步)(2)单文件上传(异步)三、总结 说明 本文记录一下springboot项目的图片上传的相关知识,主要解决项目打成jar包部署时的图片路径问题,本文会持续更新,不断地扩充 本文仅为记录学习轨迹,如有侵权,联系删除 一、图片路径分析 springboot项目在还没打包时,很多人喜欢把图片上传后,保存在项目的静态资源下,就像下面的图片那样 这样好像看来没问题,在还没打成jar包时,在idea启动运

最强菜鸟 9887

keil自动分配SDRAM空间设置使用

1.修改.sct文件。

qizhi321123的博客 1404

Image.Save 方法

Namespace:System.Drawing Assembly:System.Drawing.dll 将此图像以指定的格式保存到指定的流中。 重载 方法名称 说明 Save(String, ImageCodecInfo, EncoderParameters) 使用指定的编码器和图像编码器参数,将该 Image 保存到指定的文件。 Save(Stream, ImageCodecInfo, EncoderParameters) 使用指定的编码器和图像编码器参数,将该图像保存到指定的流。

极客神殿 1万+

一生一芯——用RTL实现最简单的处理器NPC(南大数逻计组RV32ICPU) 代码及思考参考

本文介绍自己前期用Verilog编写的基于RV32I指令集的CPU,个人认为是最简单最易懂的版本(即没做什么优化,即代码很水,没有考虑一些奇怪的情况,只适用简单指令序列,即题目所示最简单的处理器),适合新手练手Verilog以及了解简单CPU的运行过程。本文基于一生一芯,利用Verilator进行仿真,并用gtkwave查看波形,不了解verilator和gtkwave的可以看前几篇文章。

long0_o的博客 3309

PLC批量读写优化:C# Modbus TCP多寄存器批量操作(效率提升50%)

效率提升:请求次数减少90%以上,通信耗时降低50%-95%;资源节约:减少网络带宽占用和PLC/上位机CPU负载;稳定性提升:更少的请求意味着更少的通信异常;适配高频采集:满足工业现场100ms/次的高频率数据采集需求。工业落地时需注意:批量操作的核心是地址连续化规划,提前与PLC工程师协同规划寄存器地址,是优化的前提;同时需配合重试、校验机制,确保批量操作的可靠性。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1258

SpringBoot图片上传和访问路径映射

静态属性的注入方法、静态资源映射

记录我目之所及的世界 2976

RK3588之内存带宽计算及达成率

本章来和大家介绍一下内存带宽的计算与达成率

文艺小少年的博客 1813

springboot上传文件总结

springboot上传文件总结

2302_77720071的博客 839

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

vue3+springboot文件下载与上传和静态资源(图片等)访问

vue3+springboot文件下载与上传和静态资源(图片等)访问

风雨未有归期的博客 2400

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Spring Boot 文件上传与下载(图片 _ Excel)

本文承接纯接口开发的基础,完整实战了Spring Boot文件操作的核心场景——本地文件上传、图片上传与回显、Excel上传解析(POI+EasyExcel),覆盖小工具开发的核心需求,核心要点:本地文件上传:核心是生成唯一文件名、创建存储目录、校验文件合法性,通用适配所有文件类型。图片上传:额外增加格式校验、图片压缩,通过静态资源配置实现图片回显,贴合实际开发场景。Excel解析:POI适合复杂场景,EasyExcel适合大数据量,按需选择,核心是将Excel数据映射为实体类,便于后续业务处理。

码客日记的博客 762

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

springboot文件上传下载以及把上传的图片回显在前端

springboot文件上传下载以及把上传的图片回显在前端

jiyuzzz的博客 4213

Spring Boot 文件上传下载完整指南:从基础到高级实践

本文详细介绍了Spring Boot中文件上传下载的完整实现方案,从基础的单文件操作到高级的分片上传、安全性考虑和性能优化。基础实现:掌握的基本用法高级功能:实现大文件分片上传和断点续传安全性:严格验证文件类型和内容性能优化:合理配置和存储策略选择错误处理:完善的异常处理和用户反馈在实际项目中,建议根据具体需求选择合适的存储方案,并充分考虑安全性和性能因素。随着业务发展,可以考虑迁移到专业的对象存储服务,以获得更好的可扩展性和可靠性。

爱码少年 00fly.online 的博客 2万+

Spring Boot集成华为云OBS实现文件上传与预览功能(含安全下载)

本文介绍了基于Spring Boot集成华为云OBS实现文件上传与安全预览的完整解决方案。主要内容包括: 系统架构设计,包含OBS配置、文件元数据管理及接口层 安全文件上传流程,包括类型校验、唯一文件名生成及元数据存储 预签名URL机制实现临时授权访问 后端代理式预览接口解决跨域和浏览器兼容问题 文件删除的软删除实现 详细的安全实践建议 该方案适用于需要安全文件管理的企业应用场景,如简历上传、OA附件等,兼顾功能性与安全性。

qq_37067955的博客 2143

Spring Boot 图片上传-fastdfs

分布式文件系统 分布式文件系统选型 方案1:购买服务 七牛云,阿里云对象存储,腾讯云对象存储等等。。。。。 数据量少的时候可以使用 方案2:自己搭建 选择一个分布式的文件系统软件 fastdfs hdfs等 数据量大的时候使用 Fastdfs是什么 FastDFS 是用 c 语言编写的一款开源的分布式文件系统。FastDFS 为互联网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用 FastDFS很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。 F

weixin_51216079的博客 104万+

SpringBoot 上传文件/图片返回下载路径

一、创建一个springboot项目 pom.xml内容: <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </de

ck233的博客 1057

spring boot整合fastdfs实现文件上传、下载等

1、安装fastdfs 2、通过使用fastdfs-client实现文件上传、下载 3、spring boot整合实现文件上传、下载

weixin_57392053的博客 4247

实战:使用FastDFS进行文件上传下载

使用FastDFS进行文件上传 导航使用FastDFS进行文件上传一. 步骤如下1.1 引入pom依赖1.2 在resources/application.yml中配置:1.3 引入FastDFS相关的config1.4 测试FastDFS的相关代码1.5 改造业务代码 一. 步骤如下 1.1 引入pom依赖 <dependency> <groupId>com.githu...

暗余的博客 4343

文件的上传&下载

也就是说:客户端向服务端发送一些图片、视频、音频等。(上面是前端发送图片、视频、音频时代码的逻辑方式) 因此,前端通过上面的形式向我们后端发送了图片、视频、音频后,我们后端就需要通过下面的逻辑来进行接收前端传递的图片、视频、音频等信息: 第一步:首先先把ElementUI提供的上传组件搞到项目当中去: 上传组件搞到项目中后,我们后端开启服务器,访问demo下的upload.html组件,测试一下是否能成功:注意:因为我们的项目当中设置的有Filter拦截器,因此别忘记放行该访问update.html的u

lwj_07的博客 5089

Spring Boot实现文件上传和下载

Spring Boot实现文件上传和下载

北执南念的博客 5542

获取上传图片的全路径_spring boot 若依系统整合Ueditor,部署时候上传图片错误解决...

spring boot 若依系统整合Ueditor,部署时候上传图片错误解决前言:国庆假期找了个ruoyi版本的cms玩玩,从git上看,介绍如下图:后台部分截图:编辑​编辑​编辑​编辑​前台blog截图:编辑​编辑​看上去还可以不错,于是clone下来玩玩,结果发现,发布文章的时候,编辑器有问题,上传不了图片,还有其他几个地方有问题,怎么解决呢?自己上手撸代码,修改呗。于是,下载了ueditor...

weixin_32987379的博客 1292
上一篇: Java中的序列化与反序列化
下一篇: spring cloud 项目错误及其解决方案
tealala
博客等级 码龄10年 1704粉丝 65原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值