Java: скачать файл с перенаправленного ресурса с аутентификацией - PullRequest
0 голосов
/ 13 февраля 2019

У меня есть приложение Spring-boot, и я использую java.net.URLConnection для загрузки файла с сервера.

Для большинства файлов я могу загрузить файлы, используя следующий код:

    String localPath = "<localFilePath>";
    String fromUrl = "<someUrl>";
    File localFile = new File(localPath);
    if (localFile.exists()) {
      localFile.delete();
    }
    localFile.createNewFile();
    URL url = new URL(fromUrl);
    OutputStream out = new BufferedOutputStream(new FileOutputStream(localPath));
    URLConnection conn = url.openConnection();

    conn.setRequestProperty("Authorization", "Basic " + "<token>");
    InputStream in = conn.getInputStream();
    byte[] buffer = new byte[1024];

    int numRead;
    while ((numRead = in.read(buffer)) != -1) {
      out.write(buffer, 0, numRead);
    }
    if (in != null) {
      in.close();
    }
    if (out != null) {
      out.close();
    }

Это работает хорошо для большинства файлов на этом сервере, но есть один файл, который доступен через сервер (т.е. мне нужно передать основную авторизацию серверу для доступа к нему), носам файл хранится в AWS S3.

, и когда я вызываю URL-адрес загрузки с сервера, он внутренне перенаправляется на URL-адрес AWS S3 ... Примерно так:

https://s3.amazonaws.com/<serverbucketname>/<filename>?response-content-type=application/json&X-Amz-Algorithm=<Algorithm>&X-Amz-Credential=<Credentials>&X-Amz-Date=<Date>&X-Amz-Expires=600&X-Amz-SignedHeaders=host&X-Amz-Security-Token=<SecurityToken>&X-Amz-Signature=<Signature>

Этот URL уже содержит всю аутентификацию, необходимую для доступа к ресурсу.Поэтому в идеале, когда мой код вызывает исходный URL-адрес сервера и перенаправляет на этот URL-адрес, ответ все равно должен загружаться.Но я получаю следующую ошибку:

Server returned HTTP response code: 400 for URL: https://s3.amazonaws.com/...

Я не уверен, почему это неверный запрос для сервера AWS ..?Есть идеи, что может пойти не так?

Кроме того, есть ли лучший способ сделать это?

...