2016-11-07 4 views
0

У меня есть следующая проблема. Мне нужно загрузить pdf-файлы с сервера, а некоторые из них имеют пробелы в именах. Поэтому каждый файл будет загружен, но те, у которых есть пробелы, не могут быть открыты.Загруженные файлы с пробелами в пути повреждены

Если я получаю доступ к этим файлам на сервере через хром, они хорошо открываются (также с пробелом в URL-адресе).

И меня интересует, что java говорит, что файлы будут загружены. Но когда я пытаюсь открыть их в Acrobat Reader, он показывает мне сообщение об ошибке, что файлы повреждены. Вот пример моего кода:

public static void downloadFile(String fileURL, String saveDir) throws IOException { 
    Authenticator.setDefault(new Authenticator() { 
     @Override 
     protected PasswordAuthentication getPasswordAuthentication() {   
      return new PasswordAuthentication("*****", "*********".toCharArray()); 
     } 
    }); 

    final int BUFFER_SIZE = 4096; 
    URL url = new URL(fileURL); 
    HttpURLConnection httpConn = (HttpURLConnection) url.openConnection(); 
    String credentials = "ptt" + ":" + "ptt123"; 
    String encoding = Base64.getEncoder().encodeToString(credentials.getBytes(StandardCharsets.UTF_8)); 
    httpConn.setRequestProperty("Authorization", String.format("Basic %s", encoding)); 
    int responseCode = 0; 
    responseCode = httpConn.getResponseCode(); 
    // always check HTTP response code first 
    if (responseCode == HttpURLConnection.HTTP_OK) { 
     String fileName = ""; 
     String disposition = httpConn.getHeaderField("Content-Disposition"); 
     String contentType = httpConn.getContentType(); 
     int contentLength = httpConn.getContentLength(); 

     if (disposition != null) { 
      // extracts file name from header field 
      int index = disposition.indexOf("filename="); 
      if (index > 0) { 
       fileName = disposition.substring(index + 10, 
         disposition.length() - 1); 
      } 
     } else { 
      // extracts file name from URL 
      fileName = fileURL.substring(fileURL.lastIndexOf("/") + 1, 
      fileURL.length()); 
     } 



     // opens input stream from the HTTP connection 
     InputStream inputStream = httpConn.getInputStream(); 
     String saveFilePath = saveDir + File.separator + fileName; 

     // opens an output stream to save into file 
     FileOutputStream outputStream = new FileOutputStream(saveFilePath); 

     int bytesRead = -1; 
     byte[] buffer = new byte[BUFFER_SIZE]; 
     while ((bytesRead = inputStream.read(buffer)) != -1) { 
      outputStream.write(buffer, 0, bytesRead); 
     } 

     outputStream.close(); 
     inputStream.close(); 

     System.out.println("File downloaded"); 
    } else { 
     System.out.println("No file to download. Server replied HTTP code: " + responseCode); 
    } 
    httpConn.disconnect(); 
} 

Я также попытался заменить пропуска через «% 20» в fileUrl. Так в чем же проблема? Как я уже писал выше, файлы без каких-либо пробелов могут быть открыты после загрузки без каких-либо проблем.

Я использую Java 1.7.

Приветствие,

Андрей

+2

Что такое операционная система? –

+0

Я использую Windows 7 на своем рабочем столе, но я не знаю, какая ОС находится на сервере. –

ответ

0

если имя_файл содержит пространство, то заменить его на какой-либо другой charecter. он может работать, если не пожалуйста, дайте мне знать.

if(fileName.trim().contains(" ")) 
    fileName.replace(" ","_"); 
+0

Спасибо за ваш ответ, я попробовал ваше решение, но оно не работает. –

+0

Вы используете весну? –

+0

Нет, я вообще не использую фреймворк –

Смежные вопросы