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())
Это даст вам фактический объект. Продолжайте оттуда. Надеюсь, что это помогает другим....