spring 如何配置资源中文件夹的路径

gmol1639  于 2023-01-24  发布在  Spring
关注(0)|答案(1)|浏览(172)

我希望接收文件并将其保存在资源内的文件夹中。我有此终结点

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,我的Dockerfile

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!/

我应该做什么来接收资源路径?

wfsdck30

wfsdck301#

我想接收文件并将其保存在资源内的文件夹中。
这是不可能的。“resources”文件夹在一个模糊的、未知的位置。通常它是一个jar文件中的一堆条目。类路径抽象不支持“写入"类路径,即使你尝试使用黑客来做这件事,类路径通常是不可写的;一个可以写入自己文件夹的应用程序是一个小的安全失误,在一些操作系统(特别是windows)上,替换一个打开的文件并不那么容易。
写入文件的正确位置通常是主目录,例如Paths.get(System.getProperty("user.home"), "myProjectName"),或者用户可以在首选项对话框或设置文件中显式配置的位置。

相关问题