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

这听起来像是一个琐碎的问题,但是经过数小时的搜索,我仍未找到答案。据我了解,问题是我试图FileSystemResource从控制器返回a

,而Thymeleaf希望我提供一个String资源,它将使用该资源呈现下一页。但是由于返回a

FileSystemResource,因此出现以下错误:

org.thymeleaf.exceptions.TemplateInputException: Error resolving template "products/download", template might not exist or might not be accessible by any of the configured Template Resolvers

我使用的控制器映射是:

@RequestMapping(value="/products/download", method=RequestMethod.GET)

public FileSystemResource downloadFile(@Param(value="id") Long id) {

Product product = productRepo.findOne(id);

return new FileSystemResource(new File(product.getFileUrl()));

}

我的HTML链接如下所示:

<a th:href="${'products/download?id=' + product.id}"><span th:text="${product.name}"></span></a>

我不想重定向到任何地方,只需单击链接后就下载文件。这实际上是正确的实施方式吗?我不确定。

回答:

您需要将其更改th:href为如下所示:

<a th:href="@{|/products/download?id=${product.id}|}"><span th:text="${product.name}"></span></a>

然后,您还需要更改控制器并包括@ResponseBody注释:

@RequestMapping(value="/products/download", method=RequestMethod.GET)

@ResponseBody

public FileSystemResource downloadFile(@Param(value="id") Long id) {

Product product = productRepo.findOne(id);

return new FileSystemResource(new File(product.getFileUrl()));

}

以上是 使用Spring Boot和Thymeleaf创建文件下载链接 的全部内容, 来源链接: utcz.com/qa/425102.html

回到顶部