InputStream пустой? openStream причина?

Поэтому я использую решение Java SDK для загрузки CloudFiles на локальный хост: здесь

Я могу найти тестовый контейнер, перечислить, что в нем, и получить доступ / записать файлы. Но когда я пишу их, у них нет данных из исходных файлов. Они просто шелуха (0KB). Это не большие файлы, и у меня возникает проблема при вызове метода openStream() создать InputStream... Я звоню read() на это, и это сразу же возвращает меня -1 указав, что он дошел до конца файла... не знаю почему. Вот некоторый код, чтобы помочь объяснить:

ObjectList object = objectApi.list();
    for (int x = 0; x < testContainer.getObjectCount(); x++){
        SwiftObject object2 = object.get(x);

        InputStream inputStream = object2.getPayload().openStream();
        System.out.println(inputStream.read()); <-- giving me -1
        System.out.println(inputStream.available()); <-- giving me 0
        String objectName = object2.getName();
        System.out.println(objectName);
}

Это просто проверка ошибок. Кажется, что все работает с моим TestContainer... он покажет мне все папки / файлы внутри и когда я создаю:

Payload pl = object2.getPayload();

System.out.println(pl.getMetaData());

он показывает мне, что contentLength соответствует (почти соответствует) размеру файла... так что я ДУМАЮ, что мой SwiftObject отлично работает с object.get(x)....

Понятия не имею, ПОЧЕМУ я возвращаю ноль байтов при вызове read()хотя... кажется, что.openStream не работает... любая помощь очень ценится!!

И на всякий случай, это как-то проблема с моим другим кодом, вот что:

InputStream inputStream = object2.getPayload().openStream();
        String objectName = object2.getName();
        System.out.println(objectName);
        if (objectName.contains(".")){
            File newFile = new File("C:\\Users\\-----\\temp\\" + objectName);
            newFile.getParentFile().mkdirs();
            FileOutputStream outputStream = new FileOutputStream(newFile);
            byte[] aByte = IOUtils.toByteArray(inputStream);
            IOUtils.write(aByte, outputStream); //also tried IOUtils.copy(inputStream, outputStream);
            inputStream.close();
            outputStream.close();
        }

1 ответ

Итак, для тех, у кого возникла эта проблема, решение было, когда я сделал код:

ObjectList object = objectApi.list();
for (int x = 0; x <testContainer.getObjectCount(); x++){
SwiftObject object2 = object.get(x);

Это не дает фактический объект, просто список объектов, и из этого вы получаете имя. Чтобы решить мою проблему и получить объект с его именем, сохраните приведенный выше код, но добавьте:

SwiftObject realObject = object.get(Object2.getName())

Это даст вам фактический объект. Продолжайте оттуда. Надеюсь, что это помогает другим....

Другие вопросы по тегам