我有一个情况。我正在使用JPasskit生成 Apple Pass。这个 JPasskit 工作的原因如下 1) 它采用图像文件夹的位置,作为 URL 或字符串作为输入。2) 如果是 URL,则忽略主机名和端口,并考虑路径的其余部分。3) 然后它将这个文件夹的内容(在它在步骤 1 中获得的路径)复制到新的临时文件夹 4) 然后它在临时文件夹上工作,并在生成通行证后删除临时文件夹。
如果文件夹位于本地,则一切正常。但是我们使用 Alfresco 作为我们的内容管理服务器,并且所有图像都位于 Alfresco 上。因此,我必须将路径作为 URL hostname:port/folder1/folder2/folder3,API 将其解码为/folder1/folder2/folder3并抛出 FileNotFoundException,因为它无法在其本地目录结构中找到路径。所以我需要一些关于如何使用java从Alfresco服务器(linux服务器)下载文件夹并像这个api一样创建一个临时文件夹的建议。这将让我覆盖来自 JPasskit API 的特定方法调用,它将文件夹内容复制到临时文件夹中。
任何有关方面的帮助或建议都将受到高度赞赏。
我在用于创建通行证的 JPasskit api 中添加了以下代码。第一个方法createSignedAndZippedPkPassArchive将 URL 作为属性并从 URL 中剥离hostname:port并将路径的其余部分作为 String 传递给其重载版本。我正在考虑重载此方法以从 Alfresco 上的适当路径下载图像文件夹,然后继续进行。
public static byte[] createSignedAndZippedPkPassArchive(final PKPass pass, final URL fileUrlOfTemplateDirectory,
final PKSigningInformation signingInformation) throws Exception {
String pathToTemplateDirectory = URLDecoder.decode(fileUrlOfTemplateDirectory.getFile(), "UTF-8");
return createSignedAndZippedPkPassArchive(pass, pathToTemplateDirectory, signingInformation);
}
public static byte[] createSignedAndZippedPkPassArchive(final PKPass pass, final String pathToTemplateDirectory,
final PKSigningInformation signingInformation) throws Exception {
File tempPassDir = Files.createTempDir();
FileUtils.copyDirectory(new File(pathToTemplateDirectory), tempPassDir);
ObjectMapper jsonObjectMapper = new ObjectMapper();
jsonObjectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
jsonObjectMapper.setDateFormat(new ISO8601DateFormat());
createPassJSONFile(pass, tempPassDir, jsonObjectMapper);
File manifestJSONFile = createManifestJSONFile(tempPassDir, jsonObjectMapper);
signManifestFile(tempPassDir, manifestJSONFile, signingInformation);
byte[] zippedPass = createZippedPassAndReturnAsByteArray(tempPassDir);
FileUtils.deleteDirectory(tempPassDir);
return zippedPass;
}
谢谢, 达莫达尔