zeromemos
最好的学习方法就是输出所学的知识

SpringBoot文件上传至jar包同级目录

参考:https://blog.csdn.net/qq_25125327/article/details/91039288

引入依赖

        <!-- 文件上传依赖包 -->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.1</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>

在utils包下创建工具类FileHandleUtil

package com.zeromemos.utils;

import org.apache.commons.io.FileUtils;
import org.springframework.util.ResourceUtils;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

public class FileHandleUtil {

    /** 绝对路径 **/
    private static String absolutePath = "";

    /** 静态目录 **/
    private static String staticDir = "static";

    /** 文件存放的目录 **/
    private static String fileDir = "/upload/";

    /**
     * 上传单个文件
     * 最后文件存放路径为:static/upload/image/test.jpg
     * 文件访问路径为:http://127.0.0.1:8080/upload/image/test.jpg
     * 该方法返回值为:/upload/image/test.jpg
     * @param inputStream 文件流
     * @param path 文件路径,如:image/
     * @param filename 文件名,如:test.jpg
     * @return 成功:上传后的文件访问路径,失败返回:null
     */
    public static String upload(InputStream inputStream, String path, String filename) {
        //第一次会创建文件夹
        createDirIfNotExists();

        String resultPath = fileDir + path + filename;

        //存文件
        File uploadFile = new File(absolutePath, staticDir + resultPath);
        try {
            FileUtils.copyInputStreamToFile(inputStream, uploadFile);
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }

        return resultPath;
    }

    /**
     * 创建文件夹路径
     */
    private static void createDirIfNotExists() {
        if (!absolutePath.isEmpty()) {return;}

        //获取跟目录
        File file = null;
        try {
            file = new File(ResourceUtils.getURL("classpath:").getPath());
        } catch (FileNotFoundException e) {
            throw new RuntimeException("获取根目录失败,无法创建上传目录!");
        }
        if(!file.exists()) {
            file = new File("");
        }

        absolutePath = file.getAbsolutePath();

        File upload = new File(absolutePath, staticDir + fileDir);
        if(!upload.exists()) {
            upload.mkdirs();
        }
    }

    /**
     * 删除文件
     * @param path 文件访问的路径upload开始 如: /upload/image/test.jpg
     * @return true 删除成功; false 删除失败
     */
    public static boolean delete(String path) {
        File file = new File(absolutePath, staticDir + path);
        if (file.exists()) {
            return file.delete();
        }
        return false;
    }
}

测试方法

    //单文件
    @PostMapping("/upload")
    public R upload(MultipartFile photo){
        //如果非空
        if (!photo.isEmpty()){
            //获取文件名
            String originalFilename = photo.getOriginalFilename();
            //上传至static\\upload\\image\下
            try {
                FileHandleUtil.upload(photo.getInputStream(), "image/", originalFilename);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return R.ok();
    }

在application.properties里添加配置,指定static目录到jar包同级static文件夹下

#设置静态文件目录static跟jar包存放目录同级file:static/
spring.web.resources.static-locations=classpath:static/,file:static/

Postman上传测试


访问测试:


jar包和图片文件位置

评论区

关于我们

本站主要用于记录个人学习笔记,网站开发中,如需以前站内资料请加QQ群272473835索取。注册账号仅提供回帖功能,可不注册!

微信公众号