下载 PDF 文件并捕获文件名

all*_*tej 0 resttemplate spring-boot

我有一个 PDF 资源的 URL,但它不能通过文件名来识别。该请求如下所示:

GET /api/docs/12345
Accept: application/pdf
Run Code Online (Sandbox Code Playgroud)

响应是:

Status: 200 OK
Content-Type: application/pdf
Content-Disposition: attachment; filename="sample.pdf"
Run Code Online (Sandbox Code Playgroud)

当我使用 Postman 调用 api 时,它会提示使用默认文件名“response”保存文件。因此文件保存为“response.pdf”。我需要使用 RestTemplate 客户端以编程方式执行此操作。我如何捕获响应,以便我可以提取文件名(如上面的响应中所示,它是sample.pdf),并且我可以相应地保存文件,而不是诸如“response.pdf”之类的通用文件名

s.d*_*uro 5

使用 spring boot,您可以通过以下方式获取文件名:

response.getHeaders().getContentDisposition().getFilename()
Run Code Online (Sandbox Code Playgroud)

在以下情况下:

    public void retrieveFile() {
    RestTemplate restTemplate = new RestTemplate();
    HttpHeaders headers = new HttpHeaders();
    headers.setAccept(Arrays.asList(MediaType.APPLICATION_OCTET_STREAM));
    HttpEntity<String> entity = new HttpEntity<>(headers);


    ResponseEntity<byte[]> response = restTemplate.exchange(Url, HttpMethod.GET, entity, byte[].class, "1");

    if(response.getStatusCode().equals(HttpStatus.OK))
    {
        byte[] scenarioBytesFile = response.getBody();
        String fileName = response.getHeaders().getContentDisposition().getFilename();

        // Do Someting with your file and name 
    }
}
Run Code Online (Sandbox Code Playgroud)