2015-09-30 8 views
0

Каждый раз, когда я запускаю следующий код, файл сохраняется на жестком диске. Однако я хочу, чтобы он сохранялся только в контейнере Object Storage.Как избежать сохранения файла на жестком диске?

OSClient os = OSFactory.builder() 
       .endpoint("...") 
       .credentials("...","...") 
       .tenantName("...") 
       .authenticate(); 

     String containerName = "MyImgs"; 
     String objectName = "test.jpg"; 

BufferedWriter output = null; 
     try { 
      File f = new File(objectName); 
      output = new BufferedWriter(new FileWriter(f)); 
      output.write(text); 
      String etag = os.objectStorage().objects().put(containerName, 
                  objectName, 
                  Payloads.create(f)); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

UPDATE: Я использую этот API.

+1

Какие библиотеки вы используете? Ответ будет зависеть от того, что поддерживает API. –

+2

Удалите 3 строки кода (что btw багги, поскольку оно не закрывает потоки), который записывает его в файл? Что-то нам здесь не хватает? – nos

+0

Это зависит от API/envinronment. Вы используете. как правило, у Java много пишущих/читателей в ОЗУ –

ответ

2

Глядя на Javadoc на Payloads, у него есть метод, который принимает InputStream. Для того, чтобы прочитать строку как InputStream вы можете сделать

Payloads.create(new ByteArrayInputStream(text.getBytes()); 

Это позволит избежать необходимости создания файла только поэтому у вас есть что-то читать.

1

Из чтения API OpenStack4j можно создать полезную нагрузку от InputStream, так почему бы вам не сделать это вместо File?

text Преобразовать к InputStream с вспомогательной функцией, как это:

private static InputStream newInputStreamFrom(String text) { 
    try { 
     return new ByteArrayInputStream(text.getBytes("UTF-8")); 
    } catch (UnsupportedEncodingException e) { 
     throw new AssertionError(); // should not occur 
    } 
} 

И тогда ваш код может выглядеть примерно так:

OSClient os = OSFactory.builder() 
      .endpoint("...") 
      .credentials("...","...") 
      .tenantName("...") 
      .authenticate(); 

    String containerName = "MyImgs"; 
    String objectName = "test.jpg"; 
    InputStream stream = newInputStreamFrom(text); 
    String etag = os.objectStorage().objects().put(containerName, 
                 objectName, 
                 Payloads.create(stream)); 
Смежные вопросы