Я пытаюсь сохранить двоичные данные в 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