为了账号安全,请及时绑定邮箱和手机立即绑定

如何返回外部域中的文件?(弹簧靴/ java)

如何返回外部域中的文件?(弹簧靴/ java)

素胚勾勒不出你 2021-12-01 19:49:38
我正在制作接收文件下载请求的 Spring Boot Web 服务。此服务的域是a.com并且此服务从b.com域中带来请求的文件。此服务需要从外部域请求文件。我想知道在这种情况下如何向客户端返回文件下载请求的响应。下面的代码是我制作的。@RequestMapping(path = "/downloadFile", method = RequestMethod.GET)public ResponseEntity<Resource> download(String param) throws IOException {    String testFileName = "https://www.google.co.jp/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png"    URL url = new URL(testFileName);    File file = new File(url.getFile());    HttpHeaders headers = new HttpHeaders();    headers.add("Cache-Control", "no-cache, no-store, must-revalidate");    headers.add("Pragma", "no-cache");    headers.add("Expires", "0");    Path path = Paths.get(file.getAbsolutePath());    ByteArrayResource resource = new ByteArrayResource(Files.readAllBytes(path));    return ResponseEntity.ok()    .headers(headers)    .contentLength(file.length())    .contentType(MediaType.parseMediaType("application/octet-stream"))    .body(resource);}但由于文件路径,它不起作用。它的路径是这样显示的。/Users/user/devel/acomapplication/https:/www.google.co.jp/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png
查看完整描述

2 回答

?
慕莱坞森

TA贡献1810条经验 获得超4个赞

您需要使用 HTTP 客户端下载您要代理的文件。下面是一些如何做到这一点的示例。此示例使用 Apache HTTP 客户端 4.5。


@RequestMapping(path = "/downloadFile", method = RequestMethod.GET) 

public ResponseEntity download(String param) throws IOException { 

    String testFileName = "https://www.google.co.jp/images/branding/googlelogo/2x/googlelogo_color_272x92dp.png" 

    HttpClient client = HttpClientBuilder.create().build();

    HttpGet request = new HttpGet(testFileName);


    request.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); 

    request.setHeader("Pragma", "no-cache"); 

    request.setHeader("Expires", "0");


    HttpResponse response = client.execute(request);

    if (response.getStatusLine().getStatusCode()==200) {

    ByteArrayResource resource = new ByteArrayResource(Files.readAllBytes(path));


    return ResponseEntity.ok()

        .headers(headers)

        .contentLength(file.length())

        .contentType(MediaType.parseMediaType("application/octet-stream"))

        .body(response.getEntity().getContent());

    } else {

        return ResponseEntity.notFound();

    }

}


查看完整回答
反对 回复 2021-12-01
?
回首忆惘然

TA贡献1847条经验 获得超11个赞

Path path = Path.resolve(fileName).normalize();
Resource resource = new UrlResource(path.toUri());

尝试使用这个。


查看完整回答
反对 回复 2021-12-01
  • 2 回答
  • 0 关注
  • 116 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信