springboot 下载静态文件
时间: 2024-12-31 21:35:53 浏览: 9
### 实现Spring Boot应用程序中的静态文件下载
为了实现在Spring Boot应用中提供静态文件的下载功能,可以利用`@RestController`来创建一个控制器类。此控制器负责处理HTTP请求并返回响应实体对象,其中包含了要下载的文件流。
```java
import org.springframework.core.io.FileSystemResource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
@Controller
@RequestMapping("/download")
public class FileDownloadController {
@GetMapping(value = "/file", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
public ResponseEntity<FileSystemResource> downloadFile() {
String filePath = "path/to/your/static/file.txt"; // 替换为实际路径
Path path = Paths.get(filePath);
try {
HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + path.getFileName());
FileSystemResource fileSystemResource = new FileSystemResource(path.toFile());
return new ResponseEntity<>(fileSystemResource, headers, HttpStatus.OK);
} catch (Exception e) {
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
}
}
}
```
上述代码定义了一个名为 `FileDownloadController` 的控制器[^1],它监听 `/download/file` 路径下的GET请求,并尝试发送位于指定位置(`filePath`)处的一个文件作为附件给客户端浏览器。当访问该URL时,会触发文件下载操作而不是在线查看文档内容。
对于静态资源的位置配置,默认情况下,Spring Boot会在classpath根目录下寻找名为static、public、resources或META-INF/resources这样的文件夹内的资源文件;也可以通过修改application.properties 或者 application.yml 文件来自定义这些设置:
#### application.properties 配置方式:
```properties
spring.resources.static-locations=classpath:/my-static-resources/,classpath:/more-static-resources/
```
#### application.yml 配置方式:
```yaml
spring:
resources:
static-locations: classpath:/my-static-resources/,classpath:/more-static-resources/
```
这样做的好处是可以更灵活地管理项目中的不同类型的静态资产而不必局限于默认位置[^2]。
阅读全文