介绍:一般情况下使用SpringBoot在未打成jar执行时,在IDEA环境或者打成war包放在Tomcat中能够正常的使用常见的文件上传操作将文件上传到对应的static目录下以及在页面中使用文件路径进行访问,但是打成jar运行后就不能正常的上传和访问(有的文章说可以正常上传,但是我本人不能实现正常上传)。"主要是因为jar文件不能被修改"
大体思路:将jar文件下的static文件目录映射成对应的磁盘下的某个文件路径(建议:为了使用方便则创建的路径和jar所在的路径一致)
之后访问则会访问对应磁盘下的某个文件路径
一、第一步:在启动类中添加如下代码(路径映射)
//将jar文件下的对应静态资源文件路径对应到磁盘的路径(根据个人的情况修改"file:static/"的static的值)
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.
addResourceHandler("/static/**").
addResourceLocations("classpath:/static/","file:static/");
}
二、在application.yml或者properties中配置如下内容
# file配置(jar和fileUrl自己随意定义)
jar:
fileUrl: E:/dhcc/static/
################
spring:
resources:
static-locations: classpath:static/,file:${jar.fileUrl}
三、将打包成功的jar包放入到对应的文件目录中
四、运行jar使用如下命令:java -cp static -jar cry.jar
结果:
附:部分上传代码
文件上传相关代码:
@PostMapping("/upload")
@ResponseBody
public String fileUpload(@RequestParam("file") MultipartFile file,HttpSession session) {
JSONObject jsonObject=new JSONObject();
String destDir=session.getServletContext().getRealPath("/static/modular/drgreportmg/upload");
try {
FileUtil.fileToDest(file, destDir);
//保存绝对路径值
absoluteUrl=destDir+"/"+file.getOriginalFilename();
uploadedSize=100;
jsonObject.put("success", 1);
} catch (Exception e) {
jsonObject.put("success", 0);
}
return jsonObject.toJSONString();
}
//其他方法就是简单的逻辑判断
public static void fileToDest(MultipartFile file,String destDir){
if(file==null){
return ;
}else{
//目标文件路径值
String destUrl=destDir+"/"+file.getOriginalFilename();
File dest=new File(destUrl);
try {
File dir=new File(destDir);
//创建文件所在的父目录
if(!dir.exists()){
dir.mkdirs();
}
//判断目标文件是否存在,若不存在则创建一个空的文件
if(!dest.exists()){
dest.createNewFile();
}
//复制源文件到目标文件下
file.transferTo(dest);
return ;
} catch (IOException e) {
e.printStackTrace();
return ;
}
}
}