【问题标题】:Downloading Thymeleaf template from S3从 S3 下载 Thymeleaf 模板
【发布时间】:2020-07-23 15:16:01
【问题描述】:

我目前正在 S3 中存储和下载我的 Thymeleaf 模板。

我正在使用以下函数从 S3 中检索模板:

    public String getTemplateFile(String name, File localFile) {

    ObjectMetadata object = s3Client.getObject(new GetObjectRequest(connectionProperties.getBucket(), name), localFile);

    boolean success = localFile.exists() && localFile.canRead();

    return localFile.getPath();

}

执行此操作后,文件已成功下载到所需位置。

但是当尝试从 FlyingSaucer PDF 生成器访问该文件时,该文件不存在,尽管它已在 FILE_LOCATION_PATH 中下载。 (我可以打开文件...文件在那里但功能看不到它)

 String xHtmlStringDocument =
            convertHtmlToXhtml(templateEngine
                    .process(FILE_LOCATION_PATH,
                            initializeLetterHtmlTemplateContext(letter)));

当我一次又一次地运行程序时,我得到了相同的结果。但是当我停止程序并再次运行时,一切正常,因为程序现在可以识别上次执行的文件。

这听起来像是一个异步函数问题。

有人知道我该如何解决这个问题吗?

提前致谢。

已编辑(根据建议)

新功能:相同的结果: (文件已创建,从 S3 下载成功)

java.io.FileNotFoundException:无法解析 ClassLoader 资源“static/templates/template.html”

    public String getTemplateFileN(String name, File localFile) throws IOException {
    S3Object fullObject = null;
    InputStream in = null;
    try {
        fullObject = s3Client.getObject(new GetObjectRequest(connectionProperties.getBucket(), name));

        System.out.println("Content-Type: " + fullObject.getObjectMetadata().getContentType());
        System.out.println("Content: ");
        displayTextInputStream(fullObject.getObjectContent());
        in = fullObject.getObjectContent();
        System.out.println(localFile.toPath());
        Files.copy(in, localFile.toPath());

    }   //then later
    finally {
        // To ensure that the network connection doesn't remain open, close any open input streams.
        if (fullObject != null) {
            fullObject.close();
        }
        if (in != null) {
            in.close();
        }
    }

    return localFile.getPath();

}

【问题讨论】:

    标签: java spring-boot amazon-s3 thymeleaf flying-saucer


    【解决方案1】:

    检查 javadoc https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/s3/AmazonS3Client.html#getObject-com.amazonaws.services.s3.model.GetObjectRequest-java.io.File-

    我看不到方法签名ObjectMetadata getObject(GetObjectRequest getObjectRequest,String file)

    ObjectMetadata getObject(GetObjectRequest getObjectRequest,
                                    File destinationFile)
    

    您提供文件(不是字符串)作为第二个参数的位置。在尝试读取文件之前,请确保文件未打开以进行写入!

    【讨论】:

    • 感谢您的回答。我遵循了您的第一个建议,但得到了相同的结果。我还用方法签名更新了问题。
    猜你喜欢
    • 2022-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-26
    • 2017-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多