java - 如何使用支持中断(暂停、连接丢失……)的 Spring Boot 开发获取端点?
问题描述
我正在尝试开发一个从服务器下载文件的端点。我的端点应该支持中断(暂停、连接丢失……)。
目前我不知道该怎么做。我只是开发了一个简单的 get 端点。
@GetMapping("/self/{fileName}")
public ResponseEntity<Resource> getFile(@PathVariable("fileName") String fileName,
@RequestParam(value ="checksum", required = false) String checksumParam,
@RequestHeader HttpHeaders headers,
HttpServletRequest request) throws Exception {
Resource resource;
String contentType = null;
String country = headers
.getFirst(fileStorageProperties.getHeaderCountryField())
.toLowerCase();
try {
contentType = request
.getServletContext()
.getMimeType(resource.getFile().getAbsolutePath());
} catch ( IOException ex) {
this.log.error(ex.getMessage());
}
if(contentType == null) {
contentType = "application/octet-stream";
}
HttpHeaders responseHeaders = new HttpHeaders();
responseHeaders
.set(HttpHeaders.CONTENT_DISPOSITION,"attachment; filename=\"" + resource.getFilename() + "\"");
return ResponseEntity.ok()
.contentType(MediaType.parseMediaType(contentType))
.headers(responseHeaders)
.body(resource);
}
如果由于连接丢失或用户选择停止下载而停止下载,我想从停止的位置恢复下载。
解决方案
使用 Http 标头 Range 怎么样?实现您的 get 方法以检查该标头,如果存在,则只需从文件中删除该字节数。
推荐阅读
- php - 使用 PHP HTML 中的按钮删除 MySQL 数据库
- c - 通过链定义 const 的正确方法
- c - 在数组中声明指针到指针会导致分段错误
- python - 写入文件的特定列
- python - 基于OpenCV中的线分割图像和标签分割
- android - 无法初始化类 com.android.build.gradle.internal.TaskManager
- spring-boot - 如何将 application.properties 加载到 Log4j2 LogEventPatternConverter 类中?
- python-3.x - 从 pytorch 中的特定层获取输出
- parse-server - 如何使用sharp库调整解析文件img的大小?
- api - “Api”和“Restful Api”有什么区别?