【问题标题】:How to configure the path to the folder in the resources如何配置资源中文件夹的路径
【发布时间】:2023-01-27 06:07:25
【问题描述】:

我想接收文件并将它们保存在资源内的文件夹中。我有这个端点

public ResponseEntity<String> uploadPhoto(@RequestParam("file") MultipartFile file) {
        try {

            String photoName = file.getOriginalFilename();
            String path = servletContext.getClassLoader().getResource("resources/static/photos/").getPath() + photoName;

            try (FileOutputStream fileOutputStream = new FileOutputStream(path)) {
                fileOutputStream.write(file.getBytes());
            }
            return ResponseEntity.ok().build();
        } catch (Exception e) {
            log.info(e);
            return ResponseEntity.status(400).body(Exceptions.BAD_REQUEST.getMessage());
        }
    }

在本地,它将文件真正保存到我需要的地方。但是我在服务器上也有这个应用程序的一个版本。我用这个应用程序运行一个 JAR。我的文件

FROM openjdk:11
ARG JAR_FILE=build/libs/appname-0.0.1-SNAPSHOT.jar
COPY ${JAR_FILE} /app.jar
ENTRYPOINT ["java","-jar","/app.jar"]

我试图在服务器上以这种形式运行应用程序,但出现错误“没有这样的目录”。我试过了

servletContext.getClassLoader().getResource() 

方法并接收此路径

file:/app.jar!/BOOT-INF/classes!/

我应该怎么做才能获得资源路径?

【问题讨论】:

    标签: java spring file resources


    【解决方案1】:

    我想接收文件并将它们保存在资源内的文件夹中。

    这是不可能的。 “资源”文件夹位于模糊的未知位置。通常它是一个 jar 文件中的一堆条目。类路径抽象不支持“写入”到类路径中,即使您尝试使用 hackery 来做,类路径通常也是不可写的;可以写入自己的文件夹的应用程序是一个小的安全失误,在某些操作系统(尤其是 Windows)上,替换打开的文件并不那么容易。

    写入文件的正确位置通常是主目录,例如Paths.get(System.getProperty("user.home"), "myProjectName")。那个,或者,用户可以在首选项对话框或设置文件中明确配置的地方。

    【讨论】:

      猜你喜欢
      • 2014-03-07
      • 1970-01-01
      • 2021-12-21
      • 1970-01-01
      • 1970-01-01
      • 2011-05-25
      • 2010-12-02
      • 2014-07-12
      • 1970-01-01
      相关资源
      最近更新 更多