aws s3 java sdk скачать pdf поврежден

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

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

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

FileOutputStream fout = новый FileOutputStream (новый файл (имя файла назначения));

 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