aws s3 java sdk скачать pdf поврежден - PullRequest
2 голосов
/ 11 апреля 2011

Я загружаю файлы из aws s3 с помощью API getObject. Простые текстовые файлы работают нормально, но при загрузке pdf мой файл поврежден. Я использую FileOutputStream и сохраняю содержимое в файл, но сохраненный PDF-файл поврежден.

Я не совсем уверен в том, какой правильный API Java следует использовать для этой цели, и каким должен быть размер байтового массива, в который записываются прочитанные байты.

Мне также любопытно, имеет ли смысл использовать SDK напрямую или есть доступные в Java API-оболочки с открытым исходным кодом, которые я мог бы использовать.

FileOutputStream fout = новый FileOutputStream (новый файл (destFileName));

 byte[] b = new byte[8192];
 int bytesRead;
    while (true) {
     bytesRead = input.read(b);
        System.out.println("bytesRead = "+bytesRead );
        if (bytesRead==-1) 
         break;
        fout.write(b);
    }        
    fout.flush();
    fout.close();

1 Ответ

2 голосов
/ 11 апреля 2011

Если честно, я готов поспорить, проблема в том, что вы записываете весь буфер в FileOutputStream. В конце передачи буфер не будет полностью заполнен / перезаписан, и в итоге вы запишете несколько байтов в конец файла, которые были оставлены после последнего чтения. Вам нужно изменить этот код так, чтобы он записывал только количество байтов, фактически прочитанных из входного потока, а не весь буфер.

Вместо

fout.write(b);

Попробуйте

fout.write(b, 0, bytesRead);

Таким образом, если вы прочитали только 100 байтов во время последнего чтения, вы записываете только первые 100 байтов буфера и игнорируете оставшиеся 8092 байта, которые фактически уже были записаны в файл.

...