Как я могу загрузить файл из моего приложения Jhipster через REST? - PullRequest
1 голос
/ 12 апреля 2019

Я разработал приложение с использованием Jhipster, у меня есть метод для загрузки файла из моего приложения. Когда я запускаю этот метод через API REST, файл успешно загружается, но если я нажимаю кнопку в моем приложении, чтобы загрузить, это не работает, и отладка все в порядке. Их журналы одинаковы:

войти через http://localhost:9060/api/ticket-download

2019-04-12 19:20:51.971 DEBUG 940 --- [  XNIO-6 task-6] c.g.aop.logging.LoggingAspect            : Enter: com.app.web.rest.TicketResource.downloadFile() with argument[s] = []
2019-04-12 19:20:51.973 DEBUG 940 --- [  XNIO-6 task-6] c.g.aop.logging.LoggingAspect            : Exit: com.app.web.rest.TicketResource.downloadFile() with result = <200 OK,Byte array resource [resource loaded from byte array],{Content-Disposition=[attachment; filename=ticket.pdf], Cache-Control=[no-cache, no-store, must-revalidate], Pragma=[no-cache], Expires=[0], Content-Length=[92672], Content-Type=[application/pdf]}>

войти через приложение

2019-04-12 19:23:43.341 DEBUG 940 --- [  XNIO-6 task-7] c.g.aop.logging.LoggingAspect            : Enter: com.app.web.rest.TicketResource.downloadFile() with argument[s] = []
2019-04-12 19:23:43.343 DEBUG 940 --- [  XNIO-6 task-7] c.g.aop.logging.LoggingAspect            : Exit: com.app.web.rest.TicketResource.downloadFile() with result = <200 OK,Byte array resource [resource loaded from byte array],{Content-Disposition=[attachment; filename=ticket.pdf], Cache-Control=[no-cache, no-store, must-revalidate], Pragma=[no-cache], Expires=[0], Content-Length=[92672], Content-Type=[application/pdf]}>

TicketResource.java

@RestController
@RequestMapping("/api")
public class TicketResource {

    @GetMapping("/ticket-download")
    public ResponseEntity<Resource> downloadFile() {
        File file = new File("D:/Tickets/ticket.pdf");

        HttpHeaders header = new HttpHeaders();
        header.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=ticket.pdf");
        header.add("Cache-Control", "no-cache, no-store, must-revalidate");
        header.add("Pragma", "no-cache");
        header.add("Expires", "0");

        Path path = Paths.get(file.getAbsolutePath());
        ByteArrayResource resource;
        try {
            resource = new ByteArrayResource(Files.readAllBytes(path));
            return ResponseEntity.ok().headers(header).contentLength(file.length())
                    .contentType(MediaType.parseMediaType("application/pdf")).body(resource);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            return null;
        }
    }
}

Мне бы хотелось, чтобы при нажатии на кнопку «скачать» в моем приложении файл был загружен правильно

Ответы [ 2 ]

1 голос
/ 16 апреля 2019

Вам необходимо изменить service.component.ts и ticket.component.ts для работы с ответом ресурса. Я советую вам использовать библиотеку FileSaver. Вот пример файла загрузки Angular с Spring Boot, который может быть полезен для того, что вы должны сделать: http://roufid.com/angular-download-file-spring-boot/

0 голосов
/ 12 апреля 2019

Я довольно новичок в Spring, но вы прикрепляете код для контроллера загрузки, но не тот, где фактически происходит загрузка.

Файл фактически создан?

путь существует (все каталоги пути существуют)?

РЕДАКТИРОВАТЬ: Я не понимаю, что он говорит о веб-приложении, не о Swing или Javafx, поэтому код previusбыл бесполезен.Извините.

Возможно, функция не завершена, попробуйте что-то вроде этого:

downloadFile(): Observable<any> {

return this.http
   .get(SERVER_API_URL + 'api/ticket-download')
   .subscribe((data) => {

       this.blob = new Blob([data], {type: 'application/pdf'});

       var downloadURL = window.URL.createObjectURL(this.blob);

       window.open(downloadUrl);
});

Или используйте библиотеку FileSaver .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...