Как написать файл nt:file программноJAVA

Программисты JAVA общаются здесь
Anonymous
Как написать файл nt:file программно

Сообщение Anonymous »

Я пытаюсь сохранить двоичные данные в JCR, который создается «на лету». Моя проблема в том, что единственный способ, предоставляемый JCR API, — через InputStream:

Код: Выделить всё

Session session = request.getResourceResolver().adaptTo(Session.class);
ValueFactory valueFactory = session.getValueFactory();
Binary bin = valueFactory.createBinary(is);
Поскольку CQ/Sling является RESTful, я понимаю, почему это так, поскольку вы обычно получаете сообщение формы или httprequest к другому источнику, где у вас всегда есть InputStream< /код> для использования. Но в моем случае я создаю двоичный файл на лету, который обычно представляется как OutputStream.
  • Есть ли какой-нибудь другой способ, который я упустил в API JCR, где я мог создать OutputStream непосредственно на узле nt:file, точно так же, как FileOutputStream?
  • Если нет, есть ли простой способ преобразовать OutpuStream во InputStream?
Я знаю, что доступен другой способ из Apache Commons IOUtils.copy(). Я видел несколько примеров на SO, где они просто используют ByteArrayOutputStream.toByteArray() для создания InputStream. Но поскольку данные могут стать довольно большими, это не лучшее решение. Кроме того, я попробовал, но почему-то поток был неполным, поэтому, похоже, существует ограничение на буфер. Следующий подход был с конвейерными потоками, но у меня есть другие проблемы, из-за которых я открыл еще один вопрос: множественные кавычки приводят к сбою PipedOutputStream/OutputStreamWriter

EDIT:
Удален пример кода PipedStream, поскольку я опубликовал проблему с ним в другом вопросе. Итак, я все еще ищу простой способ создать файл nt:file, в котором входные данные не являются входным потоком.

Подробнее здесь: https://stackoverflow.com/questions/271 ... mmatically

Вернуться в «JAVA»