使用Spring Boot和Thymeleaf创建文件下载链接

时间:2019-03-25 04:10:06

标签: java html spring-mvc thymeleaf

我的页面上有一个下载链接,但它不起作用并出现错误。 这是我的代码。

请求映射:

@RequestMapping(value="/{id}/download", method=RequestMethod.GET)
public ResponseEntity<Resource> downloadFile(@PathVariable Integer id) {
    // Load file from database
    MsFile file = null;
    MsAnnouncement ano = null;
    try {
        ano = anRepo.findById(id).get();
        file = fileService.getFile(ano.getFileId().getId());
    } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    return ResponseEntity.ok()
            .contentType(MediaType.parseMediaType(file.getFileType()))
            .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + file.getAttachedFileName() + "\"")
            .body(new ByteArrayResource(file.getAttachedFile()));
}

html:

        <a class=" mx-1 btn btn-secondary" th:href="@{/admin/announcement/{id}/download/(id=${announcement.id})}" 
                            >Download</a> 

当我单击按钮时,我只需要下载一次文件即可。但是,当我尝试使用此代码时,无法下载文件,并且在返回ResponseEntity.ok()时出错:

以下错误:

AnnouncementController.downloadFile(AnnouncementController.java:130) ~[classes/:na]

在java:130上:

   return ResponseEntity.ok()
            .contentType(MediaType.parseMediaType(file.getFileType()))
            .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + file.getAttachedFileName() + "\"")
            .body(new ByteArrayResource(file.getAttachedFile()));
}

0 个答案:

没有答案