【发布时间】: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