首页 > 解决方案 > 如何使用支持中断(暂停、连接丢失……)的 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);


   }

如果由于连接丢失或用户选择停止下载而停止下载,我想从停止的位置恢复下载。

标签: javaspring-bootcontrollerget

解决方案


使用 Http 标头 Range 怎么样?实现您的 get 方法以检查该标头,如果存在,则只需从文件中删除该字节数。


推荐阅读