基于若依开发的项目发布在Linux上面遇到的问题汇总

基于若依开发的项目发布在Linux上面遇到的问题汇总

上传文件失败问题

现象:
出现FileNotFoundException,检查路径可得知文件的根路径错误,那个路径前缀/tmp/tomcat........
原因:
若依的上传文件方法限制。
修正:
yml配置存储资源路径时,需要使用“/”不能使用“\”。
如下配置:

# 项目相关配置
ruoyi:
  # 名称
  name: RuoYi
  # 版本
  version: 3.4.0
  # 版权年份
  copyrightYear: 2019
  # 实例演示开关
  demoEnabled: true
  # 文件路径
  profile: /opt/static/
  # 获取ip地址开关
  addressEnabled: true

图片回显不成功问题

现象:

服务器已经成功将文件上传,且能够能够找到图片并能够正常打开,但是却不能通过url正常访问。

原因:

若依ResourcesConfig类将上传路径的url写死了。

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry)
    {
        /** 文件上传路径 */
        registry.addResourceHandler("/profile/**").addResourceLocations("file:" + Global.getProfile());

        /** swagger配置 */
        registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
    }

修正:

  1. 上传时将url路径拼接成http://localhost/profile/。这样在访问资源的时,就可以通过这一条规则映射到上传文件路径。
  2. 将registry.addResourceHandler("/profile/**")里面的路径通过字符串进行拼接,使其和数据库存的图片url保持一致。(拼接和存储在数据库字段需要保持一致)

删除不成功问题

现象:

在windows系统中能够正常删除的方法,但是在Linux里面就不再好使。会提示文件找不到的异常。

原因:

这是因为创建File对象时,路径错误。Java虽然是跨平台的语言,但是如果编码写死了,那跨平台就是不可能的事情。

修正:

将拼接好的路径,需要调用该语句

String result = path.replaceAll("/",File.separator);

file.separator这个代表系统目录中的间隔符,说白了就是斜线,不过有时候需要双线,有时候是单线,你用这个静态变量就解决兼容问题了。

而且当路径错误时,常常会出现以相对路径创建文件对象,这样也会导致找不到文件的异常发生。

 File fDir=new File(File.separator); //File.separator表示根目录
 File file = new File(fDir,result);

通过这样创建就能够保证是以绝对路径创建文件。

下面是我的删除文件api,可以参考。

public static AjaxResult deleteFile(String key) throws Exception {
        //获取上传文件路径
        String uploadPath = Global.getUploadPath();
        System.out.println("上传文件路径:"+uploadPath);
        //测试参数
        key = key.replace(REPLACE_STR,"");
        key = uploadPath+key;
        //将/改为\,实现跨平台
        key = key.replaceAll("/",File.separator);
        System.out.println("key:"+key);
        File fDir=new File(File.separator); //File.separator表示根目录,比如现在就表示在D盘下。
        File file = new File(fDir,key);
        System.out.println("绝对路径:"+file.getAbsoluteFile());
        //文件存在
        if (file.exists()){
            //文件
            if (file.isFile()){
                //删除是否成功
                if (file.delete()){
                    return AjaxResult.success();
                }else {
                    throw new Exception("删除文件失败");
//                    return AjaxResult.error("删除文件失败!联系管理员");
                }
            }else {
                throw new Exception("只能删除文件");
//                return AjaxResult.error("只能删除文件!");
            }
        }else {
            throw new Exception("文件不存在!");
//            return AjaxResult.error("文件不存在!",null);
        }
    }

因为这是在公司发布项目的时候遇到的问题,在遇到问题的时候没有及时将bug登记下来。而是发布成功以后,才回忆和记录,这样导致很多现象只能通过口头描述,缺少直观的感觉,十分抱歉。

你可能感兴趣的:(基于若依开发的项目发布在Linux上面遇到的问题汇总)