当前位置: 首页 > 知识库问答 >
问题:

部署后将文件存储在spring boot resource文件夹中

司马越
2023-03-14

我已经部署了一个spring-boot应用程序JAR文件。现在,我想从android上传图像,并将其存储在资源目录的myfolder中。但无法获取资源目录的路径。

错误为:java.io.fileNotFoundException:src/main/resources/static/myfolder/myimage.png(没有这样的文件或目录)

这是将文件存储在资源文件夹中的代码

private final String RESOURCE_PATH = "src/main/resources";
String filepath = "/myfolder/";

public String saveFile(byte[] bytes, String filepath, String filename) throws MalformedURLException, IOException {

File file = new File(RESOURCE_PATH + filepath + filename);
    
OutputStream out = new FileOutputStream(file);
try {
    out.write(bytes);
} catch (Exception e) {
    e.printStackTrace();
} finally {
    out.close();
}
return file.getName();
private final String RESOURCE_PATH = "config/";
controller class: 

String filepath = "myfolder/";
String filename = "newfile.png"

public String saveFile(byte[] bytes, String filepath, String filename) throws MalformedURLException, IOException {
    
    //reading old file      
    System.out.println(Files.readAllBytes(Paths.get("config","myfolder","oldfile.png")));  //gives noSuchFileException
    
    //writing new file
    File file = new File(RESOURCE_PATH + filepath + filename);

    OutputStream out = new FileOutputStream(file);  //FileNotFoundException
    try {
        out.write(bytes);
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        out.close();
    }
    return file.getName();
}
+springdemo-0.0.1-application.zip
   +config
     +myfolder
        -oldfile.png
     -application.properties
   +lib
     +springdemo-0.0.1.jar
   +start.sh
-springdemo-0.0.1.jar       //running this jar file

共有1个答案

容鸿畴
2023-03-14

通常在部署应用程序(或使用Java启动应用程序)时,启动的是一个JAR文件。您没有资源文件夹。您也可以拥有一个并访问它,但它肯定不是src/main/resources

当您构建最终的工件(应用程序)时,它会创建一个JAR(或EAR或WAR)文件,而您的资源(您在src/main/resources-文件夹中的资源)会被复制到输出目录并包含在最终的工件中。当应用程序运行时(假设您试图独立运行它),该文件夹根本不存在。

在构建过程中,target/被创建,并包含类、资源、测试资源等(假设您使用Maven构建;如果使用Gradle或Ant或手工构建,则会有所不同)。

您可以做的是在您的最终工件旁边创建一个文件夹,例如docs,给它适当的权限(chmod/chown),并让应用程序将文件输出到该文件夹中。然后,该文件夹也应该存在于运行工件的目标机器上,因此如果不存在,则意味着该文件夹不存在,或者应用程序缺乏从该文件夹读/写的适当权限。

如果你需要更多细节,尽管问。

Update:要访问绑定的资源(例如final.jar),您应该能够使用以下方法来检索它:

testText = new String(ControllerClass.class.getResourceAsStream("/test.txt").readAllBytes());

但是,如果您想访问一个外部文件,该文件没有绑定,因此不在您的工件中,您可以使用file image=new file(...),其中...类似于“docs/image.png”。这将要求您在JAR-artifact旁边创建一个名为docs的文件夹,并在其中放置一个文件image.png

当然,您也可以使用流,并且有各种有用的库用于处理输入和输出流。

下面的代码是针对AWT的,但是如果您真的想访问图像的字节,它就可以工作:ImageIo。在控制器中,您通常不想这样做,而是让用户从给定的可用文件夹访问(从而下载)它。

 类似资料:
  • 我正在制作一个soundboard应用程序,当长按按钮1时,我需要共享sound1。我可以用以下代码创建共享菜单: 我可以与whatsapp和Google Drive完美共享音频文件,但其他应用程序不起作用。我听说您必须将文件复制到外部存储,并从那里共享它们。我已经搜索了将近两天,但我找不到这样做的方法。Stack上的其他文章也帮不了我:/ 如何在外部存储器中创建目录,将文件(sound1.ogg

  • 要验证SSL证书,我需要将包含一些文件的隐藏文件夹(“/. well-known”)上传到我的应用程序。 我正在使用eclipse部署java应用程序,但这些文件不会在appEngine上的应用程序中接收。我想它们被过滤掉了。 我试图将隐藏文件夹作为静态文件添加到appengine web。xml,但它没有帮助。 我能上传这些文件夹和文件吗?

  • 我的应用程序将一些文件保存到设备上的数据/数据文件夹中。保存远程文件后,我会处理这些文件,并将它们复制到其他文件夹中。在之前测试过的所有设备上,All都能正常工作,但在galaxy s3上会生成空指针异常。似乎我不被允许在那个文件夹上写或处理文件!但只有新的星系s3!我也无法使用EclipseDDMS文件浏览器在数据文件夹中找到任何文件,而在模拟器(相同的android版本)中,我可以正确查看所有

  • 这可以通过元数据实现吗?当在父文件夹中创建一个新文件/文件夹时,我是否也可以通过编程方式更新父文件夹的元数据,以便说:“嘿,在这个文件夹中有这些特定的文件?”

  • 问题内容: 我的应用程序( Android API 15 )制作图片并将其存储在内部存储器的文件夹中。现在,我想将此文件复制到外部存储中的另一个文件夹,例如。我尝试了以下方法: 方法1: 方法2: 方法3: 这些方法都不能解决我的任务。在检查了许多相关主题之后,我发现的唯一建议是验证 在和它确实存在。 该 方法#1 完成执行,但没有文件夹和文件被复制。 在 方法#2 ,应用程序失败,异常的,但对象

  • 这些方法都不能解决我的任务。中检查了一些相关主题,我发现的唯一建议是验证 在中,并且它仍然存在。 方法#1完成执行,但没有复制文件夹和文件。 因为这是我迈向Android的第一步,我觉得我错过了一些小东西。请告诉我,如何在Android中将文件从一个文件夹复制到另一个文件夹,包括文件从内部内存移动到外部内存。