Как добавить полный путь с файлом в представление?

java #spring #thymeleaf

#java #весна #thymeleaf

Вопрос:

Я хочу отправить полный трек для просмотра и отображения, например http://localhost:8080/fileaName . Затем я нажимаю эту ссылку и сохраняю файл на своем диске.

            String fileDownloadUri = ServletUriComponentsBuilder.fromCurrentContextPath()
            .path("src/main/resources/temp/")
            .path(fileName)
            .toUriString();
    model.addAttribute("fileDownloadUri", fileDownloadUri);
 

Теперь я не вижу ссылку на странице

 <span th:href="${fileDownloadUri}"></span>
 

Ответ №1:

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

Контроллер:

     @GetMapping("/downloadFile/{fileId}")
    public ResponseEntity<Resource> downloadFile(@PathVariable String fileId) {
        // Load file from your source
        AppUserDocument appUserDocument = someDocumentStorageService.getFile(fileId);


        return ResponseEntity.ok()
                .contentType(MediaType.parseMediaType(appUserDocument.getFileType()))
                .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=""   appUserDocument.getFileName()   """)
                .body(new ByteArrayResource(appUserDocument.getData()));
    }
 

А затем в представлении thymeleaf я бы предоставил ссылку для скачивания, как показано ниже:

 <td> <a class="btn btn-sm btn-primary" th:href="@{/downloadFile/{id}(id=${myfile.id})}">Download</a></td>
 

Вы можете сослаться на мой репозиторий github выше здесь:

https://github.com/ajkr195/springbootfileupldnldRESTDB

Или предоставьте свой полный метод контроллера, отвечающий за это. Так что люди SO могут вам помочь.