在Spring Boot应用程序中存储文件的理想方法是什么?

时间:2019-12-03 17:32:50

标签: java spring-boot file-upload

我正在使用一个Spring Boot Maven应用程序,因此在此注册表格上的客户必须上传两个文档。

  1. 许可证
  2. PAN卡。

所以我将这些文件存储在数据库中的物理位置和路径上。

因此,为了存储许可证,我在proejct根文件夹下创建了一个文件夹customerLicensePOM,对于PAN卡,我也在相同位置下创建了customerPANcard文件夹到{{1} }。

POM文件中,我已经输入了路径,因此在代码中,我正在读取文件夹位置并存储文档。

yml

因此要构建项目,我在 application: customerLicensePath: /customerLicense customerPANPath: /customerPANcard 所在的根文件夹下运行命令mvn clean install。然后生成POM文件夹并运行war我运行命令target,该命令也是从根文件夹运行的。

我不会进入java -jar ./target jarName.war,因为我将这些文件夹保存在项目根文件夹下,如果我从目标文件夹运行war文件,则将无法访问这些文件夹。

这是我的问题:-现在,如果我将此战争文件提供给客户端,那么第一个客户端必须手动创建两个文件夹来存储文档,否则他将在文件上传中遇到错误。

我们是否可以选择让客户不必执行任何操作,他只会运行war文件,并自动创建这些文件夹?

1 个答案:

答案 0 :(得分:0)

几件事。

  1. 您不想将内容与pom.xml平行。改为这样做:

    projectRoot/src/main/java/uniquePackageNameHere/ // all your code in here
               /pom.xml
    
  2. 如果希望客户端自己提供文件,只需在运行时接受路径即可。像java -jar jarName.jar -license /path/to/license -pan /path/to/pan之类的东西(使用Apache Commons-cli或其他东西)

  3. 如果您想提供文件,则将它们包含在项目的resources文件夹中:

    src/main/resources/customerLicense
    src/main/resources/customerPANcard 
    

然后,在您的代码中,通过调用以下内容来引用文件:

Main.class.getClassLoader().getResourceAsStream("customerLicense")
Main.class.getClassLoader().getResourceAsStream("customerPANcard")

这将使无论从何处运行代码,您的程序都将始终进入resources进行查找。