Как написать файл nt: программно
Я пытаюсь хранить двоичные данные в 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
.
OutputStream
непосредственно на узле nt: file, какFileOutputStream
?Если нет, есть ли простой способOutpuStream
превращается вInputStream
?Я знаю, что другой путь доступен от Apache CommonsIOUtils.copy()
, Я видел несколько примеров на SO, где они просто используютByteArrayOutputStream.toByteArray()
создатьInputStream
, Но так как данные могут стать довольно большими, это не очень хорошее решение. Кроме того, я попробовал это, и каким-то образом поток был неполным, так что, похоже, есть предел буфера. Следующий подход был с потоковыми каналами, но там у меня есть другие проблемы, с которыми я открыл другой вопрос:Несколько кавычек приводят к сбою PipedOutputStream / OutputStreamWriter
РЕДАКТИРОВАТЬ: Удален пример кода PipedStream, когда я опубликовал проблему с ним в другом вопросе. Так что здесь я все еще просто ищу простой способ создать файл nt:InputStream
.