Как скачать файл ответов REST API? - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть API со следующими данными:

GET /REST/sql_snapshot/2003-03-01.sql.gz
HTTP/1.1 Host: api.application.cap.cams.net
Authorization: Basic asdwqfasft

The response from API shown below omits the message body, which contains binary compressed SQL data.

HTTP/1.1 200 OK
Date: Wed, 05 Mar 2003 10:19:46 GMT
Server: Apache/1.3.22 (Unix) (Red-Hat/Linux)
Content-Type: application/octet-stream

У меня есть этот фрагмент кода изначально

URL location = new URL("https://api.application.cap.cams.net/REST/sql_snapshot/2003-03-01.sql.gz");
HttpsURLConnection connection = (HttpsURLConnection) location.openConnection();
connection.setHostnameVerifier(HostnameVerifierFactory getHostnameVerifier());
connection.setSSLSocketFactory(SSLConfigurerFactory.getConfigurer().getSSLSocketFactory());
connection.connect();
// after this I will retrieve the input stream of the connection. Then write the file (zip file).

Я что-то не так делаю, потому что не могу получить входной поток, поскольку код ответа соединения равен -1. Я знаю этот код ответа, но я не совсем уверен, как я получил это. Это правильный способ получения и загрузки файла из вызова REST API?

1 Ответ

1 голос
/ 06 февраля 2020

В вашем случае вы просто хотите загрузить файл и вам не нужно беспокоиться о повторных вызовах. Вы можете сделать что-то вроде этого (внешние библиотеки не нужны):

import java.io.InputStream; 
import java.net.URI; 
import java.nio.file.Files; 
import java.nio.file.Paths;
...
public void downloadFile(String url) {
    try (InputStream inputStream = URI.create(url).toURL().openStream()) {
        Files.copy(inputStream, Paths.get(url.substring(url.lastIndexOf('/') + 1)));
    }catch(Exception ex) {
        ex.printStackTrace();
    }
}

Использование:

downloadFile("https://api.application.cap.cams.net/REST/sql_snapshot/2003-03-01.sql.gz")

Сохранения:

2003-03-01.sql.gz

Это сохранит файл в том же каталоге, что и ваш проект. Если вы хотите разместить его в указанном c месте, вам придется изменить Paths.get(...) и добавить свой выходной каталог.

Что здесь происходит?

Получить имя файла с URL: url.substring(url.lastIndexOf('/') + 1).

Чтобы загрузить файл, сначала необходимо прочитать его. InputStream.

Как только вы прочитаете это URI.create(url).toURL().openStream().

Мы сохраняем то, что прочитали в нашем потоке, на диск, используя Files.copy(...)

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