springboot静态文件下载
时间: 2024-12-30 15:32:27 浏览: 9
### Spring Boot 实现静态文件下载
在 Spring Boot 中实现静态文件下载主要依赖于其内置的静态资源处理机制以及控制器方法来响应 HTTP 请求。当应用程序接收到特定路径下的请求时,可以通过 `ResourceLoader` 或者直接操作文件系统读取并返回指定的文件给客户端。
对于简单的场景可以直接利用默认映射规则,在项目根目录下创建相应的文件夹放置要提供下载服务的文件即可[^1]。不过为了更灵活地控制哪些文件可以被访问以及如何命名这些可下载链接,通常建议通过编写自定义 Controller 来完成此功能[^2]。
下面是一个基于 RestController 的简单例子用于展示怎样让用户能够从服务器端获取到某个具体的文件:
```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.PathVariable;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
@Controller
public class FileDownloadController {
private static final String FILE_PATH = "path/to/your/files/";
@GetMapping("/download/{fileName}")
public ResponseEntity<FileSystemResource> downloadFile(@PathVariable String fileName){
Path filePath = Paths.get(FILE_PATH, fileName);
try {
if (Files.exists(filePath)) {
FileSystemResource fileSystemResource = new FileSystemResource(filePath.toFile());
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_DISPOSITION,
"attachment; filename=\"" + fileSystemResource.getFilename() +"\"")
.contentType(MediaType.APPLICATION_OCTET_STREAM)
.body(fileSystemResource);
} else {
return new ResponseEntity<>(HttpStatus.NOT_FOUND);
}
} catch (Exception e) {
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
}
}
}
```
这段代码展示了如何构建一个 RESTful API 接口 `/download/{fileName}` ,它接受 URL 参数中的文件名作为输入参数,并尝试找到对应的物理位置上的文件。如果找到了该文件,则设置合适的 HTTP 响应头信息以便浏览器识别这是一个附件形式的内容流,并将其发送回给调用方;如果没有找到匹配项或是发生了其他异常情况,则分别给出 404 Not Found 或者 500 Internal Server Error 的状态码回应[^3]。
阅读全文