Невозможно загрузить файл с типом содержимого text / html - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть один URL, который будет загружать файл PDF, когда я попробую его в браузере напрямую. Но когда я использую тот же URL-адрес для загрузки файла с помощью FileInputStream в коде Java, возникает проблема, связанная с тем, что тип содержимого URL-адреса text / html вместо application / pdf, из-за которого мы не можем откройте файл, так как тип содержимого внутри URL не pdf.

Здесь возникает путаница, почему я могу загрузить файл из браузера, если тип содержимого не является application / pdf?

Что-то не так с кодом?

String pdfUrl = service.getPdfUrl(bpaRequest);
URL url1 = new URL(pdfUrl);
FileOutputStream fos1 = new FileOutputStream(fileName);
System.out.print("Connecting to " + url1.toString() + " ... ");
URLConnection urlConn = url1.openConnection();

// Checking whether the URL contains a PDF
if (!urlConn.getContentType().equalsIgnoreCase("application/pdf")) {
    throw new CustomException("INVALID_CONTENT", "contentType is not pdf");
} else {
    InputStream is1 = url1.openStream();
    while ((baLength = is1.read(ba1)) != -1) {
        fos1.write(ba1, 0, baLength);
    }
    fos1.flush();
    fos1.close();
    is1.close();
}

1 Ответ

0 голосов
/ 23 апреля 2020

В вашем случае похоже, что URL-адрес перенаправлен на другой URL-адрес, с которого загружается реальный контент.

Вам необходимо проверить заголовок Location и, если он не равен нулю, получить значение из заголовка, закрыть соединение и откройте новый по этой ссылке.

Тогда при вызове метода getContentType () это будет application / pdf

...