用springboot和thymeleaf实现文件文件下载
时间: 2025-07-06 17:46:16 浏览: 9
### 实现Spring Boot和Thymeleaf文件下载功能
在Spring Boot项目中集成Thymeleaf并实现文件下载功能,主要涉及控制器逻辑编写以及前端页面设计两部分。
#### 控制器端处理文件下载请求
为了响应用户的文件下载需求,在服务器端需创建一个专门用于处理该类HTTP GET请求的方法。此方法负责读取目标文件,并将其作为流形式返回给客户端浏览器。下面是一个简单的Java代码片段展示如何定义这样一个RESTful API接口:
```java
import org.springframework.core.io.InputStreamResource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
@RestController
@RequestMapping("/download")
public class FileDownloadController {
@GetMapping("/{fileName}")
public ResponseEntity<InputStreamResource> downloadFile(@PathVariable String fileName) throws FileNotFoundException {
// 构建文件路径
FileInputStream fileInputStream = new FileInputStream("path/to/files/" + fileName);
HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + fileName);
return ResponseEntity.ok()
.headers(headers)
.contentLength(fileInputStream.available())
.contentType(MediaType.APPLICATION_OCTET_STREAM)
.body(new InputStreamResource(fileInputStream));
}
}
```
这段代码展示了通过`@RestController`注解声明了一个名为`FileDownloadController`的控制层组件;利用`@RequestMapping`指定了基础URL映射规则;而具体的文件下载操作则由带有`@GetMapping`标注的方法完成[^1]。
#### 前端HTML页面调用API发起下载动作
对于基于Thymeleaf构建的应用程序而言,可以在视图模板内嵌入超链接或其他交互控件来触发上述服务端提供的资源获取行为。这里给出一段简化版的HTML代码样例说明怎样设置按钮点击事件从而启动文件传输过程:
```html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8"/>
<title>Document</title>
</head>
<body>
<a href="#" th:href="@{/download/{filename}(filename=${'example.pdf'})}">
Click here to Download Example PDF Document
</a>
</body>
</html>
```
在此示例中,使用了Thymeleaf特有的表达式语法`${...}`动态拼接实际参数值到预设好的路由模式里去,最终形成完整的访问地址传递给锚标签的`href`属性[^2]。
此外,还需注意确保应用程序配置文件中的静态资源目录正确指向待分发文档所在的位置,以便于顺利加载指定名称下的二进制对象至内存缓冲区供后续输出之用[^4]。
阅读全文
相关推荐


















