将Box.com中的文件同步到AEM DAM

问题描述 投票:0回答:3

我正在尝试将Box.com帐户中的文件同步到AEM(CQ5)DAM。我已经编写了一项服务,可以在其中对Box.com进行身份验证并获取文件。但是,为了让我将这些文件上传到AEM DAM,我需要将这些文件作为InputStream。在Box.com文档(https://github.com/box/box-java-sdk/blob/master/doc/files.md)上,我找到了用于下载文件的代码段。

BoxFile file = new BoxFile(api, "id");
BoxFile.Info info = file.getInfo();

FileOutputStream stream = new FileOutputStream(info.getName());
file.download(stream);
stream.close();

但是我无法在Inputstream中找到可以在其中获取文件的任何内容,因此我可以使用它将其上传到AEM DAM。当我尝试从OutputStream转换为Inputstream时,它只是不能真正工作,并在AEM中创建零字节文件。

任何指针和帮助,不胜感激!

提前感谢。

aem fileinputstream fileoutputstream box
3个回答
1
投票

我有一个类似的问题,我尝试在CQ中创建CSV并将其存储在JCR中。解决方案是管道流:

final PipedInputStream pis = new PipedInputStream();
final PipedOutputStream pos = new PipedOutputStream(pis);

尽管然后我使用OutputStreamWriter写入输出流,但FileOutputStream.download也应正常工作。

要实际写入JCR,您需要ValueFactory,可以从JCR会话(这里是我的CSV的示例)中获取:

ValueFactory valueFactory = session.getValueFactory();
Node fileNode = logNode.addNode("log.csv", "nt:file");
Node resNode = fileNode.addNode("jcr:content", "nt:resource");
resNode.setProperty("jcr:mimeType", "text/plain");
resNode.setProperty("jcr:data", valueFactory.createBinary(pis));
session.save();

编辑:未经测试的BoxFile示例:

try {
    AssetManager assetManager = resourceResolver.adaptTo(AssetManager.class);
    BoxFile file = new BoxFile(api, "id");
    BoxFile.Info info = file.getInfo();

    final PipedInputStream pis = new PipedInputStream();
    final PipedOutputStream pos = new PipedOutputStream(pis);
    Executors.newSingleThreadExecutor().submit(new Runnable() {
        @Override
        public void run() {
            file.download(pos);
        }
    });

    Asset asset = assetManager.createAsset(info.getName(), pis, info.getMimeType(), true);

    IOUtils.closeQuietly(pos);
    IOUtils.closeQuietly(pis);
} catch (IOException e) {
    LOGGER.error("could not download file: ", e);
}

0
投票

如果我正确理解了代码,则将文件下载到名为info.getName()的文件中。尝试使用FileInputStream(info.getName())从下载的文件中获取输入流。

BoxFile file = new BoxFile(api, "id");
BoxFile.Info info = file.getInfo();

FileOutputStream stream = new FileOutputStream(info.getName());
file.download(stream);
stream.close();
InputStream inStream=new FileInputStream(info.getName());

0
投票

嗨,阿比尼特·巴特纳加尔

您能提供maven pom吗,因为它无法用AEM 6.4解决依赖关系

© www.soinside.com 2019 - 2024. All rights reserved.