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

Spring Boot REST API返回文件列表

奚卓
2023-03-14

我正在尝试从目录中返回文件列表。这是我的代码:

package com.demo.web.api.file;

import java.io.File;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.demo.core.Logger;

import io.swagger.v3.oas.annotations.Operation;

@RestController
@RequestMapping(value = "/files")
public class FileService {

    private static final Logger logger = Logger.factory(FileService.class);

    @Value("${file-upload-path}")
    public String DIRECTORY;

    @Value("${file-upload-check-subfolders}")
    public boolean CHECK_SUBFOLDERS;

    @GetMapping(value = "/list")
    @Operation(summary = "Get list of Uploaded files")
    public ResponseEntity<List<File>> list() {

        List<File> files = new ArrayList<>();

        if (CHECK_SUBFOLDERS) {

            // Recursive check
            try (Stream<Path> walk = Files.walk(Paths.get(DIRECTORY))) {
                List<Path> result = walk.filter(Files::isRegularFile).collect(Collectors.toList());

                for (Path p : result) {
                    files.add(p.toFile().getAbsoluteFile());
                }
            } catch (Exception e) {

                logger.error(e.getMessage());

            }

        } else {

            // Checks the root directory only.
            try (Stream<Path> walk = Files.walk(Paths.get(DIRECTORY), 1)) {
                List<Path> result = walk.filter(Files::isRegularFile).collect(Collectors.toList());

                for (Path p : result) {
                    files.add(p.toFile().getAbsoluteFile());
                }
            } catch (Exception e) {

                logger.error(e.getMessage());

            }

        }

        return ResponseEntity.ok().body(files);

    }

}

如代码所示,我正在尝试返回文件列表。

如何使它返回文件对象而不是文件路径字符串?我需要获取要在视图中显示的文件属性(大小、日期等)。

共有1个答案

李捷
2023-03-14

我建议你改变你的回答

public ResponseEntity<List<Resource>> list() {}

您还可以尝试在@GetMapping注释中指定 produce=MediaType... 参数,以便告诉 HTTP 编组程序预期哪种内容。

 类似资料:
  • 问题内容: 我注意到了另一种执行答案的方法。使用AudioSystem.getAudioFileTypes()返回指定文件夹中的所有受支持的音频文件。我是一个经验不足的编码人员,无法在给定的答案中集成此方法 谁能告诉我该怎么做? 问题答案: 以下资源将显示特定于Java Sound可以理解的文件类型的。用户选择任何声音剪辑后,即可使用该应用程序。将获得该目录中所有剪辑的列表,并以组合方式显示它们。

  • 当使用Vim和内置的netrw文件浏览支持浏览本地目录时,我想打开一个文件来查看它,然后返回文件列表中打开文件前的相同位置。 我通常浏览文件的方式是在netrw中按打开文件,然后当我完成查看文件,并且我想返回文件列表时,我按返回netrw视图,但是光标总是回到文件列表的顶部,这在我浏览典型目录时非常不方便。我想回到文件列表中我按Enter打开文件时所在的相同位置。 我知道我可以通过在netrw文件

  • 问题内容: 我试图做一些简单的命令来向文件中写入hello world: 这将返回一个空文件。 问题答案: Python每次之后都不会刷新文件。您要么需要使用以下命令手动刷新它: 或自己关闭它: 在实际程序中使用文件时,建议使用: 这样可以确保即使抛出异常也将关闭文件。但是,如果您想在REPL中工作,则可能要坚持手动关闭它,因为它会在尝试执行之前尝试读取全部内容。

  • 问题内容: 在PHP中,如何从包含的脚本返回到包含它的脚本? IE浏览器: 1-主脚本2-应用程序3-包含 基本上,我想从3返回2,return()不起作用。 代码2-应用 问题答案: includeme.php: main.php: 也给出相同的结果 这是PHP鲜为人知的功能之一,但是对于设置非常简单的配置文件来说可能会很好。

  • 问题内容: 返回对象的名称为。因此,当我致电时,此代码将失败。我有什么办法可以解决临时问题吗?还是我应该怎么做? ps这是我在python中的第一个代码。我认为这是功能。 问题答案: 您可以使用返回的反向迭代器。调用时,它会在列表中进行原位反转,并返回None。 编辑: 我知道您现在正在尝试执行的操作,在我看来,仅凭列表理解就可以轻松完成此操作: 这基本上是在第一个元素之后查看所有元素,并收集所有