Листинг файлов каталога в Spring-Boot - PullRequest
0 голосов
/ 21 апреля 2020

Есть ли простой способ показать список каталогов моей папки resources / stati c SPRING BOOT (v 2.1)?

Файлы находятся в папке resources / stati c, и я могу получить к ним доступ их отдельно, но я хочу получить список всех файлов и открыть их, нажав на заголовок, как показано на рисунке.

Я хочу «выставить» файлы журналов в ресурсах / static / logs. Если возможно, ответьте на вопрос в Kotlin.

Я нашел похожий вопрос на SO, но он не помог: Spring boot Tomcat - включить / отключить список каталогов

Directory Listing

1 Ответ

0 голосов
/ 21 апреля 2020

Попробуйте это. Он обнаруживает новые файлы и папки (регистрирует новое средство просмотра папок) и выполняет некоторые логи c.

Где-то в классе конфигурации ...

@Bean(name = "storageWatchService")
public WatchService createWatchService() throws IOException {
    return FileSystems.getDefault().newWatchService();
}

@Component
public class StorageWatcher implements ApplicationRunner {

    private static final Logger LOG = LoggerFactory.getLogger(StorageWatcher.class);

    private static final WatchEvent.Kind<Path>[] WATCH_EVENTS_KINDS = new WatchEvent.Kind[] {StandardWatchEventKinds.ENTRY_CREATE};

    private static final Map<WatchKey, Path> KEY_PATH_MAP = new HashMap<>();

    @Resource
    private PPAFacade ppaFacade;

    @Resource
    private WatchService storageWatchService;

    @Resource
    private Environment environment;

    @Override
    public void run(ApplicationArguments args) {
        try {
            registerDir(Paths.get(environment.getProperty(RINEX_FOLDER)), storageWatchService);

            while (true) {
                final WatchKey key = storageWatchService.take();
                for (WatchEvent<?> event : key.pollEvents()) {
                    if (event.kind() == StandardWatchEventKinds.ENTRY_CREATE && event.context() instanceof Path) {
                        final String fullPath = KEY_PATH_MAP.get(key) + "\\" + event.context().toString();
                        final File file = new File(fullPath);

                        if (file.isDirectory()) {
                            registerDir(file.toPath(), storageWatchService);
                        } else {
                            ppaFacade.process(file);
                        }
                    }
                }
                if (!key.reset()) {
                    KEY_PATH_MAP.remove(key);
                }
                if (KEY_PATH_MAP.isEmpty()) {
                    break;
                }
            }
        } catch (InterruptedException e) {
            LOG.error("StorageWatcher has been interrupted. No new files will be detected and processed.");
        }
    }

    private static void registerDir(Path path, WatchService watchService) {

        if (!Files.isDirectory(path, LinkOption.NOFOLLOW_LINKS)) {
            return;
        }
        try {
            LOG.info("registering: " + path);
            final WatchKey key = path.register(watchService, WATCH_EVENTS_KINDS);
            KEY_PATH_MAP.putIfAbsent(key, path);
            Arrays.stream(path.toFile().listFiles()).forEach(f -> registerDir(f.toPath(), watchService));
        } catch (IOException e) {
            LOG.error(MessageFormat.format("Can not register file watcher for {0}", path), e);
        }
    }
}
...