Как вернуть файл, который находится во внешнем домене?(весенний ботинок / Java) - PullRequest
0 голосов
/ 23 октября 2018

Я делаю весенний загрузочный веб-сервис, который получает запрос на загрузку файла.

Домен для этой службы 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 ]

0 голосов
/ 23 октября 2018

Вам нужно использовать HTTP-клиент для загрузки файла, который вы хотите прокси.Вот пример того, как вы можете это сделать.В этом примере используется HTTP-клиент Apache 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();
    }
}
0 голосов
/ 23 октября 2018
Path path = Path.resolve(fileName).normalize();
Resource resource = new UrlResource(path.toUri());

Попробуйте использовать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...