SpringBoot接收上传文件及打成Jar包失败的解决方案

本文介绍了Spring Boot应用在打包成jar后,文件上传功能失效的常见问题。问题源于getResource()方法在jar环境下无法找到静态资源目录。解决方案是配置Spring Boot的静态资源位置,并创建一个UploadUtils工具类进行文件合法性校验和路径获取。同时,提供了UploadController用于处理上传请求。代码示例和详细配置见文。
摘要由CSDN通过智能技术生成

首发地址:https://www.hsmus.top/202101244.html
在本地IDE运行是上传功能通过VoteMangeController.class.getClassLoader().getResource("")).getPath()确定上传目录是正常的,但是打成 jar 包放到服务器通过 java -jar xxxxx.jar 运行时报错。

具体报错信息:

java.io.FileNotFoundException: /Users/zhang/Codes/java/javaCode/xxx/target/tomcat-
static/tomcat/work/Tomcat/localhost/ROOT/./file:/Users/zhang/Codes/java/javaCode/x
xxxx/target/xxxxx.jar!/BOOT-INF/classes!/static/uploads/20d4530867a02b46926e2d562b
ef9d78.jpeg (No such file or directory)

0.可能的原因

jar文件不能被修改

1.解决方案

1.1 思路

将文件上传到static/uploads并将static目录设置为静态资源目录(static-locations)

1.2 application.yml
my:
  upload-path: /uploads/  # 上传的路径,相对于/static/
  allow-max-size: 5 * 1024 *1024 # 单文件最大多大,单位字节
  allow-ext: jpg,jpeg,png,gif # 允许什么类型的文件,英文逗号分隔

spring:
  servlet:
    multipart:
      max-request-size: 10MB # 设置最大的最大请求大小
      max-file-size: 10MB    # 设置单文件的最大请求大小
      enabled: true
  web:
    resources:
      static-locations: classpath:/static/,file:/static/ # 非常重要,一定要设置
1.3 UploadUtils

为了方便以后的使用,将获取服务器上传的物理路径和校验文件合法性的功能封装成一个工具类

项目里面使用到了hu-tool,使用前应先在pom.xml添加依赖

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>4.1.1</version>
</dependency>
package com.hsmus.upload.utils;

import cn.hutool.core.io.FileUtil;
import cn.hutool.crypto.digest.DigestUtil;
import org.springframework.stereotype.Component;
import org.springframework.util.ResourceUtils;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Date;
import java.util.List;

/**
 * @author Mustard
 * @date 2021/1/22
 * @time 14:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值