aws s3 java sdk изтегляне на pdf се поврежда

Изтеглям файлове от aws s3 с помощта на getObject api. Обикновените текстови файлове работят добре, но при изтегляне на pdf файлът ми е повреден. Използвам FileOutputStream и записвам съдържание във файл, но записаният pdf се поврежда.

Не съм съвсем сигурен за правилния Java API, който да използвам за тази цел и какъв трябва да бъде размерът на байтовия масив, където се записват прочетените байтове.

Също така съм любопитен дали използването на SDK директно има смисъл или има налични API за обвивка с отворен код в Java, които бих могъл да използвам.

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();

person aarti    schedule 11.04.2011    source източник


Отговори (1)


За да бъда честен с вас, готов съм да се обзаложа, че проблемът е, че записвате целия буфер в FileOutputStream. В края на предаването буферът няма да бъде напълно пълен/пренаписан и в крайна сметка ще запишете някои байтове в края на файла, които са останали от последното четене. Трябва да модифицирате този код, за да запишете само броя байтове, които действително са прочетени от входния поток, а не целия буфер.

Вместо

fout.write(b);

Опитвам

fout.write(b, 0, bytesRead);

По този начин, ако прочетете само 100 байта по време на последното четене, вие записвате само първите 100 байта от буфера и игнорирате останалите 8092 байта, които всъщност вече са били записани във файла.

person Chris Thompson    schedule 11.04.2011