SpringBoot部署项目到Linux上传文件路径问题

本文解决SpringBoot项目在Linux服务器上部署时的文件上传路径问题,通过配置映射服务器URL到本地绝对路径,确保图片等静态资源能正确上传并被访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SpringBoot部署项目到Linux上传文件路径问题

使用项目相对路径上传到话会上传到linux服务器到/tmp 临时文件目录中,但是问题是还会报异常

Caused by: java.io.FileNotFoundException: /tmp/tomcat.8223985333111777969.80/work/Tomcat/localhost/ROOT/file:/project/myblog-0.0.1-SNAPSHOT.jar!/BOOT-INF/classes!/static/img/User/v2-3e1d742d3d2a98cbf122b3414ceb29e7_720w.jpg (No such file or directory)

如上述到异常。

解决办法

使用绝对路径

1、但是我们知道服务器访问时是访问服务器url ,所以我们要用url映射到绝对路径中。

package com.Config;


import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;

@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {


    @Value("${file.staticAccessPath}")
    private String staticAccessPath;

    @Value("${file.uploadFolder}")
    private String uploadFolder;

    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
       registry.addResourceHandler("/img/**").addResourceLocations("classpath:/static/img/");
       registry.addResourceHandler("/css/**").addResourceLocations("classpath:/static/css/");
       registry.addResourceHandler("/js/**").addResourceLocations("classpath:/static/js/");
       registry.addResourceHandler("/editor.md-master/**").addResourceLocations("classpath:/static/editor.md-master/");

       // 配置 服务器上的地址 localhost:8080/Users/zlf/myBlog/upload/ 映射到本地linux/Mac  /Users/zlf/myBlog/upload/ (需要在前面加 file:)
       registry.addResourceHandler(staticAccessPath+"**").addResourceLocations("file:"+uploadFolder);
       super.addResourceHandlers(registry);


    }
}



附加上上传文件配置

package com.Config;


import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.MultipartConfigFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.unit.DataSize;

import javax.servlet.MultipartConfigElement;

@Configuration
public class UploadFileConfig {


    @Value("${file.uploadFolder}")
    private String uploadFolder;

    @Bean
    public MultipartConfigElement multipartConfigElement() {
        MultipartConfigFactory factory = new MultipartConfigFactory();
        factory.setLocation(uploadFolder);
        //文件最大
        factory.setMaxFileSize(DataSize.parse("5MB"));
        // 设置总上传数据总大小
        factory.setMaxRequestSize(DataSize.parse("10MB"));
        return factory.createMultipartConfig();
    }
}


application.yaml

file:
  # 服务器上的地址 localhost:8080/Users/zlf/myBlog/upload
  staticAccessPath: /Users/zlf/myBlog/upload/
  # 本地路径 /Users/zlf/myBlog/upload
  uploadFolder: /Users/zlf/myBlog/upload/

这样我们存储图片文件时就存储在linux的绝对路径就行,访问服务器时服务器会自动映射。

### 部署 Java SpringBoot 项目Linux 的宝塔面板 #### 准备工作 在开始之前,确保已经完成以下准备工作: - 已经拥有一个可以正常运行的 SpringBoot 项目。 - 购买了支持 Linux 系统的云服务器(如腾讯云或其他服务商)并已成功连接至该服务器。 - 在本地开发环境中测试过项目的功能。 #### 打包 SpringBoot 项目为 JAR 文件 为了能够顺利部署到远程服务器上,需要先将 SpringBoot 应用程序打包成可执行的 JAR 文件。可以通过 Maven 或 Gradle 构建工具实现这一目标[^1]。 ```bash mvn clean package -DskipTests=true ``` 上述命令会清理旧的目标目录、编译源码以及跳过单元测试从而生成最终产物——位于 `target` 文件夹下的 `.jar` 文件[^2]。 #### 安装 JDK 和 MySQL 数据库服务 登录到您的 Linux 服务器并通过 SSH 终端或者通过宝塔管理后台进入命令行界面。首先确认是否安装了最新版本的 OpenJDK: ```bash java -version ``` 如果没有找到合适的 JDK 版本,则需下载适合您系统的 JDK 并按照官方文档指示进行安装。对于 MySQL 数据库同样如此,也可以借助宝塔面板图形化操作简化流程。 #### 使用宝塔面板上传文件与配置环境变量 利用宝塔提供的便捷方式快速完成文件传输任务而不必依赖复杂的 FTP 设置过程。具体步骤如下所示: 1. 登录到宝塔官网注册账户绑定域名解析指向对应 IP 地址; 2. 创建站点关联磁盘路径作为存储位置; 3. 将刚才构建好的 jar 包拖拽上传至此处指定区域等待进度条结束即表示成功传送完毕; 接着,在同一界面上方导航栏选择“软件商店”,搜索并点击安装所需的 JDK 及 Nginx (用于反向代理访问) 。完成后记得重启所有相关进程以应用更改效果。 #### 启动应用程序 当一切准备就绪之后就可以尝试启动我们的 spring boot 应用了。切换回 ssh session 输入下面这条简单的 java 命令即可让其作为一个守护线程持续运作下去直到人为干预停止它为止 : ```bash nohup java -jar your-application-name.jar > app.log & ``` 这样不仅可以让程序保持在线状态而且还能把日志记录重定向保存起来方便后续排查错误信息。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值