Java 如何在spring应用程序中从web服务下载图像/pdf文件

Java 如何在spring应用程序中从web服务下载图像/pdf文件,java,spring,rest,web,thymeleaf,Java,Spring,Rest,Web,Thymeleaf,@GetMapping(value=“/image”,products=“application/pdf”) @应答器 公共字符串下载文件(@PathVariable(“path”)字符串路径)引发IOException{ ClassPathResource downloadLink=新的ClassPathResource(“/assets/”+path) 我检查您的代码您的代码几乎是正确的,但您需要修改一些代码,您可以使用此示例代码下载文件:您可以参考此代码 @RestController @

@GetMapping(value=“/image”,products=“application/pdf”) @应答器 公共字符串下载文件(@PathVariable(“path”)字符串路径)引发IOException{ ClassPathResource downloadLink=新的ClassPathResource(“/assets/”+path)


我检查您的代码您的代码几乎是正确的,但您需要修改一些代码,您可以使用此示例代码下载文件:您可以参考此代码

@RestController
@RequestMapping("/download")
public class DownloadFileRestController {
    @Autowired
    ServletContext context;

    @RequestMapping(value = "/pdf/{fileName:.+}", method = RequestMethod.GET, produces = "application/pdf")
    public ResponseEntity<InputStreamResource> download(@PathVariable("fileName") String fileName) throws IOException {
        System.out.println("Calling Download:- " + fileName);
        ClassPathResource pdfFile = new ClassPathResource("downloads/" + fileName);
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.parseMediaType("application/pdf"));
        headers.add("Access-Control-Allow-Origin", "*");
        headers.add("Access-Control-Allow-Methods", "GET, POST, PUT");
        headers.add("Access-Control-Allow-Headers", "Content-Type");
        headers.add("Content-Disposition", "filename=" + fileName);
        headers.add("Cache-Control", "no-cache, no-store, must-revalidate");
        headers.add("Pragma", "no-cache");
        headers.add("Expires", "0");

        headers.setContentLength(pdfFile.contentLength());
        ResponseEntity<InputStreamResource> response = new ResponseEntity<InputStreamResource>(new InputStreamResource(pdfFile.getInputStream()), headers, HttpStatus.OK);
        return response;

    }
}
@RestController
@请求映射(“/download”)
公共类下载FileRestController{
@自动连线
ServletContext;
@RequestMapping(value=“/pdf/{fileName:.+}”,method=RequestMethod.GET,products=“application/pdf”)
公共响应属性下载(@PathVariable(“fileName”)字符串fileName)引发IOException{
System.out.println(“调用下载:-”+文件名);
ClassPathResource Pdfile=新的ClassPathResource(“下载/”+文件名);
HttpHeaders=新的HttpHeaders();
headers.setContentType(MediaType.parseMediaType(“application/pdf”);
headers.add(“访问控制允许原点”、“*”);
添加(“访问控制允许方法”、“获取、发布、放置”);
添加(“访问控制允许标题”、“内容类型”);
headers.add(“内容处置”、“文件名=“+filename”);
添加(“缓存控制”,“无缓存,无存储,必须重新验证”);
添加(“Pragma”、“无缓存”);
标题。添加(“到期”、“0”);
headers.setContentLength(pdfFile.contentLength());
ResponseEntity response=newresponseEntity(新的InputStreamResource(pdfFile.getInputStream()),头,HttpStatus.OK);
返回响应;
}
}

我检查您的代码您的代码几乎正确,但您需要修改一些代码,您可以使用此示例代码下载文件:您可以参考此代码

@RestController
@RequestMapping("/download")
public class DownloadFileRestController {
    @Autowired
    ServletContext context;

    @RequestMapping(value = "/pdf/{fileName:.+}", method = RequestMethod.GET, produces = "application/pdf")
    public ResponseEntity<InputStreamResource> download(@PathVariable("fileName") String fileName) throws IOException {
        System.out.println("Calling Download:- " + fileName);
        ClassPathResource pdfFile = new ClassPathResource("downloads/" + fileName);
        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.parseMediaType("application/pdf"));
        headers.add("Access-Control-Allow-Origin", "*");
        headers.add("Access-Control-Allow-Methods", "GET, POST, PUT");
        headers.add("Access-Control-Allow-Headers", "Content-Type");
        headers.add("Content-Disposition", "filename=" + fileName);
        headers.add("Cache-Control", "no-cache, no-store, must-revalidate");
        headers.add("Pragma", "no-cache");
        headers.add("Expires", "0");

        headers.setContentLength(pdfFile.contentLength());
        ResponseEntity<InputStreamResource> response = new ResponseEntity<InputStreamResource>(new InputStreamResource(pdfFile.getInputStream()), headers, HttpStatus.OK);
        return response;

    }
}
@RestController
@请求映射(“/download”)
公共类下载FileRestController{
@自动连线
ServletContext;
@RequestMapping(value=“/pdf/{fileName:.+}”,method=RequestMethod.GET,products=“application/pdf”)
公共响应属性下载(@PathVariable(“fileName”)字符串fileName)引发IOException{
System.out.println(“调用下载:-”+文件名);
ClassPathResource Pdfile=新的ClassPathResource(“下载/”+文件名);
HttpHeaders=新的HttpHeaders();
headers.setContentType(MediaType.parseMediaType(“application/pdf”);
headers.add(“访问控制允许原点”、“*”);
添加(“访问控制允许方法”、“获取、发布、放置”);
添加(“访问控制允许标题”、“内容类型”);
headers.add(“内容处置”、“文件名=“+filename”);
添加(“缓存控制”,“无缓存,无存储,必须重新验证”);
添加(“Pragma”、“无缓存”);
标题。添加(“到期”、“0”);
headers.setContentLength(pdfFile.contentLength());
ResponseEntity response=newresponseEntity(新的InputStreamResource(pdfFile.getInputStream()),头,HttpStatus.OK);
返回响应;
}
}

我得到一个base64字符串,需要将其转换为文件并在html页面上呈现。我看不到代码中的转换。解码后您可以发送数据:`ResponseEntity response=new ResponseEntity(新字符串(base64.getDecoder().decode(Pdfile.getInputStream().toString())、标题、HttpStatus.OK);`i获得一个base64字符串,我需要将其转换为文件并在html页面上呈现。我看不到代码中的转换。解码后您可以发送数据:`ResponseEntity response=new ResponseEntity(新字符串(base64.getDecoder().decode(Pdfile.getInputStream().toString())、标题、HttpStatus.OK)`