基于Hutools图片上传下载

2023-10-27

1.pom依赖

        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.1.0</version>
        </dependency>

2.上传

@Component
@Slf4j
public class FileUtils {
    private static final int MAX_POST_SIZE = 10 * 1024 * 1024;
    @Value("${file.preview.port}")
    private String filePreviewPort;
    @Value("${ng.address}")
    private String ngAddress;
    @Value("${upload.path}")
    private String uploadPath;

    public String getUrlPreFix() {
        return ngAddress + ":" + filePreviewPort + File.separator;
    }

    /**
     * 文件上传
     *
     * @param multipartFile
     * @return
     * @throws IOException
     */
    public String uploadOne(MultipartFile multipartFile) throws IOException {
        // 参数检验
        if (multipartFile == null) {
            throw new ParamException("文件不能为空");
        }
        // 文件限制10M
        long size = multipartFile.getSize();
        if (size > MAX_POST_SIZE) {
            throw new ParamException("length exceeds limit of 10M");
        }
        String folder = uploadPath + File.separator;
        if (!FileUtil.exist(folder)) {
            FileUtil.mkdir(folder);
        }
        String fileName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddhhmmssSSS")) + multipartFile.getOriginalFilename();
        String path = folder + fileName;
        File file = new File(path);
        if (FileUtil.exist(file)) {
            throw new ParamException("文件已存在");
        }
        File file1 = FileUtil.writeBytes(multipartFile.getBytes(), path);
        if (file1.length() < 0) {
            throw new ParamException("文件上传失败");
        }
        return fileName;
    }


}

3.下载

        String path = "url";
        String fileUrl = uploadPath + File.separator + path;
        File file = FileUtil.file(fileUrl);
        if (StringUtils.isEmpty(path) || file == null || !file.exists()) {
            throw new ParamException("文件不存在");
        }
        ServletOutputStream outputStream = response.getOutputStream();
        response.setContentType("application/force-download");
        // 设置编码,避免文件名中文乱码
        response.setHeader("Content-Disposition", "attachment;filename=" + new String(path.toString().getBytes("gb2312"), "ISO8859-1"));
        outputStream.write(FileUtil.readBytes(file));
        IoUtil.close(outputStream);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于Hutools图片上传下载 的相关文章

随机推荐

  • 在Linux下编译VLC-Qt

    在Linux下编译VLC Qt 一 源码准备 1 下载VLC源码 2 下载VLC Qt源码 二 编译VLC源码 1 解压VLC压缩包 2 安装VLC依赖的库 3 配置VLC 4 编译与安装 三 编译VLC Qt源码 1 安装cmake 2
  • 【服务器学习之 Docker 容器技术学习笔记】

    Docker 文章目录 Docker 什么是Docker 为什么要使用Docker Docker与虚拟机的区别 Docker安装 下载wget工具 备份centos的yum仓库源 下载阿里云仓库源 更新本地软件列表和缓存 下载docker
  • 图像处理之纹理特征提取

    旋转不变性 图像旋转时 所选特征不随图像的旋转而发生变化 LBP参考 LBP纹理特征提取 灰度不变性 旋转不变性 import numpy as np from PIL import Image import math def LBP sr
  • chatgpt赋能python:PythonTCP断开连接原因和解决方案

    Python TCP 断开连接原因和解决方案 Python 是一种广泛使用的编程语言 它支持网络编程 数据处理 人工智能 机器学习等诸多领域 在网络编程中 Python 通常使用 TCP 连接传输数据 然而 在使用 TCP 连接传输数据的过
  • eclipse新建项目有红叉,项目可以正常启动。解决办法。

    eclipse里遇到红叉或者报错 首先应该在Window gt Show View gt Problems下查看错误信息 一般可以知道报错原因 报错有很多原因 以下是我自己遇到的 1 Project configuration is not
  • unity中fixedUpdate和Update的区别

    下面这段代码演示游戏暂停 using UnityEngine using System Collections public class GamePauseTest MonoBehaviour public float moveSpeed
  • 【框架篇】Gin框架源码解读【更新中】

    1 中间件 中间件的实现 依照设计模式中责任链模式 依次调用当前路由 注册的中间件 gin go HandlerFunc defines the handler used by gin middleware as return value
  • Perl 批量添加Copyright版权信息

    对所有输入文件 如果没有版权信息则加上版权信息 否则什么都不做 并对原文件以 bak结尾备份 开始我使用如下程序 尝试前千万先备份输入的文件 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 2
  • 财报解读:创维集团2022年业绩表现凸显韧性,新能源业务将大有作为

    2023年3月23日 创维集团披露了2022年财报 总营收534 91亿元 同比增长5 03 归属母公司净利润8 27亿元 同比下降49 39 在电视行业正处于阵痛期的情况下 这份业绩展现了公司的发展韧性 而从财报也可以看出 创维感受到了电
  • 录音如何转文字?这几款音频转文字工具可以给到你帮助

    记录文本速度总是赶不上倾听语音速度 咋整 别急 这有一招献给你 我们可以借助音频转文字工具 快速将语音信息转写 轻松解放双手 音频转文字工具不仅转写语音的速度快 而且转写效果杠杠的 值得一试哦 话不多说 音频转文字免费教程双手奉上 有需要的
  • DS18B20温度传感器使用介绍

    DS18B20温度传感器简介 DS18B20是一种数字温度传感器 应用非常广泛 它输出的是数字信号 同时具有体积小 硬件资源耗费少 抗干扰能力强 精度高等特点 DS18B20温度传感器特点 1 采用单线接口方式 DS18B20温度传感器仅需
  • 实现按钮悬停动画

    知识点与技巧 伪元素 使用伪元素来作为按钮悬停效果动画展示的元素 z index 的使用技巧 使用z index属性来控制按钮和伪元素的层次关系 transform transition 复习 使用transform transition两
  • 舵机的使用方法和一些注意事项

    舵机是我们经常使用的一个工具 它可以说是直流电机的进化版本 只需要一根信号线就能方便的控制舵机旋转固定的角度 下面我们就来看一看舵机的使用方法和一些使用过程中的注意事项 一般的舵机总共有三条线 电源线 供电线 和信号线 其中红色的是电源正极
  • 在idea隐藏掉不想要看到的文件(设置隐藏文件)

    一 为什么隐藏 因为想 通常 我们会在项目中 看到很多不常用或者根本不操作的文件 那么 我们就会选择 隐藏 掉 注 但是需要心中有数 有些文件隐藏后 可能会影响开发 谨慎 二 如何设置 1 找到File gt Setting gt File
  • vite和esbuild/roolup的优缺点

    esbuild 优点 基于go语言 go是纯机器码 不使用 AST 优化了构建流程 多线程并行 缺点 esbuild 没有提供 AST 的操作能力 所以一些通过 AST 处理代码的 babel plugin 没有很好的方法过渡到 esbui
  • 第十天Python之面向对象(OOP)基本概念

    面向对象编程 Object Oriented Programming 简写 OOP 目标 了解 面向对象基本概念 一 面向对象基本概念 我们之前学习的编程方式就是 面向过程 的 面向过程 和 面向对象 是两种不同的 编程方式 对比 面向过程
  • Linux学习笔记--rm命令(删除文件或目录)

    rm 英文名remove 删除的意思 1 命令格式 rm 选项 文件或目录 2 常用选项 rm f 强行删除 忽略不存在的文件 不提示确认 f为force的意思 rm i 进行交互式删除 即删除时会提示确认 i为interactive的意思
  • CentOS7.x系统中使用Docker时,在存储方面需要注意的问题

    简述 1 Docker 1 12 6 v17 03文档中CentOS7系统下安装时 明确说明 用于生产时 必须使用devicemapper驱动的direct lvm模式 需要我们提前准备好块设备 以提供更好的稳定性和性能 默认使用devic
  • Java阿里云短信发送工具类

    短信服务API介绍 阿里云短信发送 调用SendSms发送短信 短信服务 阿里云帮助中心
  • 基于Hutools图片上传下载

    1 pom依赖