Как обслуживать динамически созданные файлы с помощью Java Spring? - PullRequest
1 голос
/ 03 июня 2019

Я пытаюсь создать приложение (с загрузкой Spring), которое будет генерировать файлы (файлы .js), которые должны быть общедоступными.Эти файлы (после создания) должны быть доступны по ссылке на моем сервере и вставлены на чужой сайт (со ссылкой).Что-то похожее на то, как работают jQuery или Google Adwords (как они связаны с тегом html-скрипта).Таким образом, проблема, с которой я сталкиваюсь (или просто недостаток знаний), заключается в том, как динамически создавать эти файлы и делать их общедоступными.

Идея в целом такова: 1 пользователь имеет 1 папку (внутри ресурсов /папка с файлами, например) (назовем это folder1232).Внутри этой папки создаются его конкретные js-файлы (например, 111.js).Поэтому я хочу, чтобы он мог получить доступ к своему файлу, запросив URL app.com/files/folder1232/111.js.Каким будет способ сделать это?Пожалуйста, дайте мне знать, если что-то неясно.

В настоящее время я играю с папкой ресурсов, чтобы понять, как она работает в целом.Что я вижу, так это то, что файлы каким-то образом отображаются при запуске (например, если я создаю новую папку с файлом во время выполнения, она не будет доступна, пока я не перезапущу приложение).Я также пытался использовать WebMvcConfigurer, но мне кажется, что мне не хватает чего-то простого.

@Configuration
@EnableWebMvc
public class MvcConfig implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/files/**")
                .addResourceLocations("file:/files/")
                .setCachePeriod(3600)
                .resourceChain(true)
                .addResolver(new PathResourceResolver());
    }
}

Я ожидаю получить доступ к вновь созданным файлам (во время выполнения) из браузера.Также было бы идеально, если бы я мог иметь доступ к вновь созданным папкам (во время выполнения), а также.Но мне нужно перезапустить приложение, чтобы получить доступ к вновь созданным файлам и папкам.

ОБНОВЛЕНИЕ: то, что я пытался сделать дальше, - это создать папку вне моего проекта Java.Например: / Users /% username% / Documents / fileFold И изменил мою функцию addResourceHandler на:

@Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/files/**")
                .addResourceLocations("file:/Users/%username%/Documents/fileFold/")
                .setCachePeriod(0)
                .resourceChain(true)
                .addResolver(new PathResourceResolver());
    }

Теперь она работает отлично.Спасибо всем!ПРИМЕЧАНИЕ. Не забудьте про последнюю косую черту в функции addResourceLocations, без нее отображение не будет работать (по крайней мере, у меня не сработало).

Ответы [ 2 ]

0 голосов
/ 03 июня 2019

Итак, что сработало для меня конкретно: я создал папку для хранения файлов вне проекта.Например, / Users /% username% / Documents / fileFold

И изменил мою функцию addResourceHandlers на

registry.addResourceHandler("/files/**")
                .addResourceLocations("file:/Users/%username%/Documents/fileFold/")
                .setCachePeriod(0)
                .resourceChain(true)
                .addResolver(new PathResourceResolver());

ПРИМЕЧАНИЕ. Не забудьте последнюю косую черту в вашей функции addResourceLocations, отображение не будет работатьбез него (по крайней мере, у меня не получилось).

0 голосов
/ 03 июня 2019

Во-первых, поймите проблему, которую вы на самом деле пытаетесь решить.Не просто переходите к «Я хочу это решение».

Проблема, которую вы пытаетесь решить, выглядит следующим образом:

  1. Мое приложение «создаст» некоторую копию (copy - это общий термин для текста, который включает в себя ваши файлы .js.
  2. Указанная копия будет общедоступна через некоторый уникальный идентификатор.

Ни одно из вышеперечисленных требований не требует, чтобы высоздавать файлы где угодно.

Одно простое решение: в приведенном ниже решении «строка» может быть либо ровно одной строкой, либо упорядоченной коллекцией из 1 или более строк.

  1. Создатьстрока в таблице, которая содержит «копию», которая должна быть обслужена.
  2. Используйте уникальное значение для идентификации строки.
  3. [Необязательно] Создайте таблицу для преобразования между понятным человеку именем (aka имя файла) для строки и уникальный идентификатор для указанной строки.
  4. Создание службы REST для извлечения строки по понятному человеку имени.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...