Java spring-boot项目中如何上传下载文件或图片到spring-boot规定的非静态目录

这篇具有很好参考价值的文章主要介绍了Java spring-boot项目中如何上传下载文件或图片到spring-boot规定的非静态目录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题

  • spring-boot的项目,虽然它自己定义了一个静态文件的存储目录,但是这个目录一般是作为前端静态文件的目录来作为使用的。如果使用这个静态目录来作为我们上传文件的目录会有一个比较尴尬的地方:将spring-boot打包成为jar包后,随着上传图片的增多,这个jar包也会跟着变大,而且,在jar包中的图片要单独取出来查看或者编辑都极不方便。
  • 因此我们需要另外定义一个文件目录来单独存储我们上传文件的目录。
  • 这里是基础教学,大神请绕路,如果看到后有什么比较好的意见也欢迎评论区指出。以下以自己的一个个人项目来作为演示,有不清楚或有什么问题的地方,也请评论区指出。

上传

此处的范围类型 AjaxResult 是一个继承 HashMap 类,从若依框架上拿过来的。至于包名,我也没改,自己改一下吧

HttpStatus 类

package com.example.xixieguan.utils;


/**
 * 返回状态码
 *
 * @author ruoyi
 */
public class HttpStatus
{
    /**
     * 操作成功
     */
    public static final int SUCCESS = 200;

    /**
     * 对象创建成功
     */
    public static final int CREATED = 201;

    /**
     * 请求已经被接受
     */
    public static final int ACCEPTED = 202;

    /**
     * 操作已经执行成功,但是没有返回数据
     */
    public static final int NO_CONTENT = 204;

    /**
     * 资源已被移除
     */
    public static final int MOVED_PERM = 301;

    /**
     * 重定向
     */
    public static final int SEE_OTHER = 303;

    /**
     * 资源没有被修改
     */
    public static final int NOT_MODIFIED = 304;

    /**
     * 参数列表错误(缺少,格式不匹配)
     */
    public static final int BAD_REQUEST = 400;

    /**
     * 未授权
     */
    public static final int UNAUTHORIZED = 401;

    /**
     * 访问受限,授权过期
     */
    public static final int FORBIDDEN = 403;

    /**
     * 资源,服务未找到
     */
    public static final int NOT_FOUND = 404;

    /**
     * 不允许的http方法
     */
    public static final int BAD_METHOD = 405;

    /**
     * 资源冲突,或者资源被锁
     */
    public static final int CONFLICT = 409;

    /**
     * 不支持的数据,媒体类型
     */
    public static final int UNSUPPORTED_TYPE = 415;

    /**
     * 系统内部错误
     */
    public static final int ERROR = 500;

    /**
     * 接口未实现
     */
    public static final int NOT_IMPLEMENTED = 501;

    /**
     * 系统警告消息
     */
    public static final int WARN = 601;
}


AjaxResult类

package com.example.xixieguan.utils;
import java.util.HashMap;
public class AjaxResult extends HashMap<String, Object>
{
    private static final long serialVersionUID = 1L;

    /** 状态码 */
    public static final String CODE_TAG = "code";

    /** 返回内容 */
    public static final String MSG_TAG = "msg";

    /** 数据对象 */
    public static final String DATA_TAG = "data";

    /**
     * 初始化一个新创建的 AjaxResult 对象,使其表示一个空消息。
     */
    public AjaxResult()
    {
    }

    /**
     * 初始化一个新创建的 AjaxResult 对象
     *
     * @param code 状态码
     * @param msg 返回内容
     */
    public AjaxResult(int code, String msg)
    {
        super.put(CODE_TAG, code);
        super.put(MSG_TAG, msg);
    }

    /**
     * 初始化一个新创建的 AjaxResult 对象
     *
     * @param code 状态码
     * @param msg 返回内容
     * @param data 数据对象
     */
    public AjaxResult(int code, String msg, Object data)
    {
        super.put(CODE_TAG, code);
        super.put(MSG_TAG, msg);
//        super.put(DATA_TAG, data);
        if (data!=null)
        {
            super.put(DATA_TAG, data);
        }
    }

    /**
     * 返回成功消息
     *
     * @return 成功消息
     */
    public static AjaxResult success()
    {
        return AjaxResult.success("操作成功");
    }

    /**
     * 返回成功数据
     *
     * @return 成功消息
     */
    public static AjaxResult success(Object data)
    {
        return AjaxResult.success("操作成功", data);
    }

    /**
     * 返回成功消息
     *
     * @param msg 返回内容
     * @return 成功消息
     */
    public static AjaxResult success(String msg)
    {
        return AjaxResult.success(msg, null);
    }

    /**
     * 返回成功消息
     *
     * @param msg 返回内容
     * @param data 数据对象
     * @return 成功消息
     */
    public static AjaxResult success(String msg, Object data)
    {
        return new AjaxResult(HttpStatus.SUCCESS, msg, data);
    }

    /**
     * 返回警告消息
     *
     * @param msg 返回内容
     * @return 警告消息
     */
    public static AjaxResult warn(String msg)
    {
        return AjaxResult.warn(msg, null);
    }

    /**
     * 返回警告消息
     *
     * @param msg 返回内容
     * @param data 数据对象
     * @return 警告消息
     */
    public static AjaxResult warn(String msg, Object data)
    {
        return new AjaxResult(HttpStatus.WARN, msg, data);
    }

    /**
     * 返回错误消息
     *
     * @return 错误消息
     */
    public static AjaxResult error()
    {
        return AjaxResult.error("操作失败");
    }

    /**
     * 返回错误消息
     *
     * @param msg 返回内容
     * @return 错误消息
     */
    public static AjaxResult error(String msg)
    {
        return AjaxResult.error(msg, null);
    }

    /**
     * 返回错误消息
     *
     * @param msg 返回内容
     * @param data 数据对象
     * @return 错误消息
     */
    public static AjaxResult error(String msg, Object data)
    {
        return new AjaxResult(HttpStatus.ERROR, msg, data);
    }

    /**
     * 返回错误消息
     *
     * @param code 状态码
     * @param msg 返回内容
     * @return 错误消息
     */
    public static AjaxResult error(int code, String msg)
    {
        return new AjaxResult(code, msg, null);
    }

    /**
     * 方便链式调用
     *
     * @param key 键
     * @param value 值
     * @return 数据对象
     */
    @Override
    public AjaxResult put(String key, Object value)
    {
        super.put(key, value);
        return this;
    }
}

controller类

package com.example.xixieguan.controller;

import com.example.xixieguan.utils.AjaxResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ResourceLoader;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.UUID;

@RestController
@RequestMapping("/api")
public class FileUploadController {
    private String separator = File.separator;//获取操作系统的文件分隔符
    @Autowired
    private ResourceLoader resourceLoader;
    @PostMapping("/upload")
    public AjaxResult upload(@RequestParam("file") MultipartFile file) throws IOException {
        // 判断是否为空文件
        AjaxResult ajaxResult = AjaxResult.error();
        ajaxResult.put("msg","上传失败");
        if (file.isEmpty()) {
            return ajaxResult;
        }
        // 获取文件名
        String fileName = file.getOriginalFilename();
        // 获取文件后缀
        String suffixName = fileName.substring(fileName.lastIndexOf("."));
        // 重新生成文件名
        fileName = UUID.randomUUID() + suffixName;
        // 设置文件存储路径

        Path currentDir = Paths.get("images");
        Path filePath = currentDir.toAbsolutePath();
        if (!Files.exists(filePath)) {
            Files.createDirectory(filePath);
        }
        File dest = new File(filePath + separator  + fileName);
        try {
            // 保存文件
            file.transferTo(dest);
            ajaxResult = AjaxResult.success();
            ajaxResult.put("msg","上传成功");
            return ajaxResult;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return ajaxResult;
    }
    
}

添加web配置类

  • 建议添加在config包下
  • images是我自己定义用来存储上传文件的目录名,你可以根据自己的需求来定制。但是需要注意的是在上传的时候也需要是同样的目录名,不然会出现找不到目录的尴尬场面。
package com.example.xixieguan.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class StaticResourceConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/images/**")
                .addResourceLocations("file:./images/");
    }
}

完成以上两步,已经可以将图片上传到自定义的目录位置了,如果不行的话,在application.yml中再添加一项配置

application.yml

spring:
  web:
    resources:
      static-locations: file:./image/

通过上述方式,已经基本可以完成 Java spring-boot项目上传下载文件或图片的功能需求,关键在于不用将文件放置到spring-boot的静态目录下了。减少了维护的麻烦事儿。文章来源地址https://www.toymoban.com/news/detail-587658.html

到了这里,关于Java spring-boot项目中如何上传下载文件或图片到spring-boot规定的非静态目录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • minio + linux + docker + spring boot实现文件上传与下载

    检查linux内核,必须是3.10以上 安装docker 启动docker 搜索镜像 拉取镜像 启动minio -p: 指定端口映射,格式为:主机端口:容器端口 (这里注意要映射两个,否则API会访问不到) -e “MINIO_ROOT_USER=vinci” minio用户名; -e MINIO_SECRET_KEY=123456 minio 密码 -d: 后台运行容器,并返回容器ID; -

    2024年02月07日
    浏览(40)
  • 2023 最新版IntelliJ IDEA 2023.1创建Java Web前(vue3)后端(spring-boot3)分离 项目详细步骤(图文详解)

    2023 最新版IntelliJ IDEA 2023.1创建Java Web 项目详细步骤(图文详解) 本篇使用当前Java Web开发主流的spring-boot3框架来创建一个Java前后端分离的项目,前端使用的也是目前前端主流的vue3进行一个简单的项目搭建,让你距离Java全栈开发更近一步 🏴‍☠️。 使用版本: “17.0.1”

    2024年02月12日
    浏览(44)
  • Grafana+Prometheus技术文档-进阶使用-监控spring-boot项目

    阿丹:         之前已经实现了使用Prometheus来对服务器进行了监控和仪表盘的创建,现在就需要对这些监控方法使用在spring-boot中去。         1、集成Actuator         2、加入Prometheus的依赖         3、配置开放端口、以及开放监控         4、配置Prometheus中的配置      

    2024年02月13日
    浏览(28)
  • 基于Java (spring-boot)的图书管理系统

    一、项目介绍 该图书管理系统提供了一系列功能,包括图书管理、图书类型管理、读者借阅归还图书、用户管理和重置密码等。 在图书管理功能中,管理员可以方便地进行图书信息的管理。他们可以添加新的图书记录,包括书名、作者、出版社、ISBN等信息,并可以对已有的

    2024年02月04日
    浏览(32)
  • github下载的项目如何上传到gitee

    省略   如何注册、登录省略   省略 iot-plat创建过了,用iot-plat1演示 此处的https地址要记住,等会要用到 项目里面 空白处右键,选中 Git Bash Here 配置用户名和邮箱  全局操作,配置过的,就不用配置了,可以略过 初始化本地仓库  添加项目文件至本地仓库 提交添加注释 fi

    2024年02月09日
    浏览(33)
  • spring-boot项目启动类错误: 找不到或无法加载主类 com.**Application

    问题:Springboot项目启动报错:错误: 找不到或无法加载主类 com.**Application 解决步骤: 1.File–Project Structure 2.Modules–选中你的项目–点击“-”移除 3.重新导入:点击“+”号,选择Import Module,找到项目所在路径,选中要导入的项目,点击OK。 选择maven,点击ok 4.重新编译:点击

    2024年04月17日
    浏览(38)
  • Docker 部署spring-boot项目(超详细 包括Docker详解、Docker常用指令整理等)

    大家好!我是夏小花,今天是 2023年10月29日|农历九月十五 ,转眼间,马上进入到十一月份,最近这段时间一直在项目上没有更新文章,话不多说,今天这篇博文主要是 简单了解一下docker、dockerfile的使用、docker部署spring-boot项目以及一些docker常用的指令 ,本篇文章中如果有不

    2024年02月08日
    浏览(28)
  • spring-boot定时任务

    定时任务规则:0  *  *  * ? *  * 表示任意月的任意周的每天的每时的每分的0秒开始一次任务。 任务加在方法上  开始一次任务 表示 启动 一次方法。 0/5 *  *  5  *  4  表示 每月的最后一周的第五天的任意时任意分的0秒开始 每隔5秒启动一次任务。 定时任务表达式 还有很

    2024年01月21日
    浏览(44)
  • Spring MVC异步上传、跨服务器上传和文件下载

    之前的上传方案,在上传成功后都会跳转页面。而在实际开发中,很多情况下上传后不进行跳转,而是进行页面的局部刷新,比如:上传头像成功后将头像显示在网页中。这时候就需要使用异步文件上传。 编写JSP页面,引入jQuery和jQuery表单上传工具jquery.form.js【该js文件已经

    2024年02月16日
    浏览(31)
  • spring-boot 依赖注入流程

    一、基本使用 主要是三个注解的使用,@Autowired,@Value,@Resource 二、实现步骤 拦截bean的创建 要想拦截bean,就需要处理spring bean生命周期事件,spring通过一些接口来处理事件,实现属性注入,需要 InstantiationAwareBeanPostProcessor接口来完成。 找到注解的字段,并注入值 获取被注

    2024年02月03日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包