jQuery load + Spring + Thymeleaf. Подгрузка файлов

160
21 октября 2019, 16:30

Есть файл, допустим, general.html:

<div>
  <h1>Hello World!</h1>
</div>

Этот файл я хочу "импортировать" в файл index.html с помощью ajax:

$(document).ready(function () {
    let trigger = $('.left-side > div > a'),
        container = $('.right-side');
    trigger.click(function () {
        let $this = $(this),
            target = $this.data('target');
        container.load(target + '.txt');
        return false;
    });
});

В обычном браузере данный код у меня работает нормально, но когда дело доходит до spring, файл не может быть загружен, потому что он "недоступен" для использования.

Вопрос: Как мне реализовать загрузку файла general.html в index.html, при этом запретить доступ юзерам к просмотру данного файла "напрямую" (допустим, www.example.com/includes/general.html)?

Answer 1

На ум приходит такая идея:

  1. Создайте сервис для получения файла.

    public interface FileService {
       File load(String path);
    }
    
  2. Реализуйте его.

    @Service
    public class FileServiceImpl implements FileService {
        @Override
        public File load(String path) {
            return new File(Paths.get(".").toAbsolutePath().normalize().toString() + path);
        }
    }
    
  3. Используйте напрямую в контроллере или как компонент другого сервиса.

    @RestController
    public class CssLoaderRestController {
    @Autowired
    private FileService fileService;
    @GetMapping(value = "/api/css")
    public ResponseEntity<InputStreamResource> getCss(@RequestParam(value = "name", required = false) String name)
            throws IOException {
        File f = fileService.load("/css/" + name + ".css");
        return ResponseEntity
                .ok()
                .header("Content-Type", "text/css")
                .body(new InputStreamResource(new FileInputStream(f)));
        }
    }
    
READ ALSO
как найти значение в хеш таблице(словаре)?

как найти значение в хеш таблице(словаре)?

Сначала я ввожу словами числаЗатем на вход программе подаётся значение N — количество записей, которые необходимо обработать Следующие...

120
Изменение имени класса java [закрыт]

Изменение имени класса java [закрыт]

Как можно изменить имя класса из главного метода?

171
отсутствует, не заполняется flowExecutionUrl

отсутствует, не заполняется flowExecutionUrl

Делаю приложение используя Spring MVC и Spring Web Flow, сделав некий flow я могу попасть на него используя ${flowExecutionUrl} в JSP файле, но из-за некой, невиданной...

120
Некорректная работа synchronized java

Некорректная работа synchronized java

Изучаю Герберта Шилдта Java 8 Руководство для начинающих, и вопрос в следующемСогласно книге метод synchronized обязан дать выполниться методу до завершения...

156