2015-06-17 2 views
1

В настоящее время я разрабатываю собственное приложение для Android и пытаюсь получить доступ к некоторым изображениям на сервере документов. Для общения я использую библиотеку OpenCMIS.Скачивание файлов как .zip через cmis

Моя цель - загрузить фотографии и сохранить их на внутреннем устройстве или SD-карте устройства. Мой вопрос: есть ли возможность загружать файлы как сжатый архив, например, .zip, и извлечь его на устройстве? Поэтому вместо загрузки большого количества файлов по отдельности я хотел бы загрузить один большой файл.

Это что-то OpenCMIS способно? Или это зависит от сервера документов? Я работаю с SAP Mobile Documents и знаю, что я могу загрузить целую папку в виде .zip из веб-интерфейса через браузер, но я не нашел что-то об этом в пользовательском клиенте android.

Любые подсказки или объяснения приветствуются, спасибо заранее!

+0

Скачать в Zip не CMIS. Я думаю, что ваш единственный вариант - открыть новый zip-файл для записи, а затем передать содержимое каждого документа CMIS в него. – Gagravarr

+0

SAP Mobile Documents обеспечивает скрытое воспроизведение в папках (идентификатор потока: «sap: zipRendition»). Вы можете использовать getContentStream() для доступа к нему. –

+0

благодарит @Florian, что звучит как с чем работать! есть ли какие-либо примеры, доступные в Интернете для этого, поскольку я не могу найти их. или вы могли бы предоставить более подробное объяснение? – daco

ответ

1

Так что я получил его с help from Florian Müller.

Для любого interessted, окончательный код для загрузки папки в виде ZIP-архива с сервера SAP Mobile Document в родной Android приложение будет выглядеть примерно так:

public void downloadAsZip(Session session, Folder folder, File destination){ 
    ContentStream zipStream = session.getContentStream(folder, "sap:zipRendition", null, null); 
    InputStream inputStream = zipStream.getStream(); 

    try { 
     File file = new File(destination, folder.getName()+".zip"); 
     FileOutputStream fileOutputStream = new FileOutputStream(file); 

     byte[] buffer = new byte[1024]; 
     int bufferLength = 0; 

     while ((bufferLength = inputStream.read(buffer)) > 0) { 
      fileOutputStream.write(buffer, 0, bufferLength); 
     } 

     fileOutputStream.close(); 
     inputStream.close(); 
    } 
    catch(IOException e){ 
     Log.e(TAG, "An error occurred: "+e.getMessage()); 
    } 
}