Java - архив gz загружен как поток октетов

У меня возникла проблема при загрузке файла gzip и его сохранении в файловой системе с помощью Java 5. По завершении загрузки файл (с правильным именем и расширением), похоже, имеет другой тип MIME ... I Мне не удается распаковать его с моего Linux-сервера (используя gunzip), и если я попытаюсь открыть его с помощью WinZip на моем ПК с Windows, я вижу «рекурсивный» архив (как матрешка). Если я наберу с сервера команду file *filename*.gz, он распознает файл как ascii text. Вместо этого, если я попытаюсь загрузить архив с помощью браузера, все будет хорошо, я могу правильно открыть и разархивировать файл (даже на моем сервере Linux), и теперь он распознается как gzip compressed archive.

Вот код, который я использую для загрузки файла и его сохранения.

Main.java:

public class Main {

public static void main(String[] args) {

    String filePath = "";
    HttpOutgoingCall httpOngoingCall = null;
    httpOngoingCall = new HttpOutgoingCall();
    String endpointUrl = "https://myurl/myfile.gz";
    try {

        InputStream inputStream = httpOngoingCall.callHttps(endpointUrl);
        //I also tried with ZipInputStream and GZIPInputStream

        BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));

        filePath = parseAndWriteResponse(br, "myfile.gz", "C:\\");

        System.out.println(filePath);

    } catch (Exception e) {
        System.out.println(e.getMessage());
    }
}


private static String parseAndWriteResponse(BufferedReader br, String fileName,
                                     String destPath) {
    String outputFileName = null;

    outputFileName = destPath + File.separator + fileName;

    String line;
    File outputFile = new File(outputFileName);
    FileWriter fileWriter = null;
    BufferedWriter bw = null;

    try {
        if (!outputFile.exists()) {
            outputFile.createNewFile();
        }
    } catch (IOException e1) {

    }

    try {
        fileWriter = new FileWriter(outputFile);
        bw = new BufferedWriter(fileWriter);
        while ((line = br.readLine()) != null) {
            bw.write(line);
            bw.write("\n");
        }
    } catch (IOException e) {

    } finally {
        try {
            bw.close();
            fileWriter.close();
        } catch (IOException e) {

        }
    }
    return outputFileName;
}

HttpOutgoingCall.java:

public class HttpOutgoingCall {

private InputStream inStream = null;

private HttpsURLConnection httpsConnection = null;


private final static int CONNECTION_TIMEOUT = 20000;


public InputStream callHttps(String endpointUrl) throws Exception {

    String socksServer = "";
    String socksPort = "";

    Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());

    Properties properties = System.getProperties();

    System.setProperty("java.protocol.handler.pkgs", "javax.net.ssl");
    java.security.Security
            .addProvider(new com.sun.net.ssl.internal.ssl.Provider());

    if (!socksServer.equals("")) {
        if (System.getProperty("socksProxyHost") == null) {
            properties.put("socksProxyHost", socksServer);
        }
        if (!socksPort.equals("")) {
            if (System.getProperty("socksProxyPort") == null) {
                properties.put("socksProxyPort", socksPort);
            }
        }
    }
    System.setProperties(properties); 

    System.setProperty("java.protocol.handler.pkgs", "javax.net.ssl");
    java.security.Security
            .addProvider(new com.sun.net.ssl.internal.ssl.Provider());
    TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
        public java.security.cert.X509Certificate[] getAcceptedIssuers() {

            return null;
        }

        public void checkClientTrusted(
                java.security.cert.X509Certificate[] certs, String authType) {
        }

        public void checkServerTrusted(
                java.security.cert.X509Certificate[] certs, String authType) {
        }
    } };

    try {
        SSLContext sc = SSLContext.getInstance("SSL");
        sc.init(null, trustAllCerts, new java.security.SecureRandom());
        HttpsURLConnection
                .setDefaultSSLSocketFactory(sc.getSocketFactory());

        HostnameVerifier hv = new HostnameVerifier() {
            public boolean verify(String urlHostName, SSLSession session) {
                return true;
            }
        };

        HttpsURLConnection.setDefaultHostnameVerifier(hv);

        httpsConnection = (HttpsURLConnection) (new URL(endpointUrl)).openConnection();

        httpsConnection.setDoOutput(true);
        httpsConnection.setUseCaches(false);

        httpsConnection.setConnectTimeout(CONNECTION_TIMEOUT);
        httpsConnection.setReadTimeout(CONNECTION_TIMEOUT);

        inStream = httpsConnection.getInputStream();

    } catch (Exception e) {}

    return inStream;
}

Кто-нибудь может мне помочь? Спасибо!

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
132
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

При написании файла вы должны отправить его через java.util.zip.GZIPOutputStream.

Оно работает! Мне также нужно было изменить InputStream на GZIPInputStream

Federico Scardina 03.10.2018 17:08

Ваше здоровье! Рад помочь.

BrentR 03.10.2018 17:15

Другие вопросы по теме