首发地址: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: