5
我正在尝试使用Apache的PDFBox读取PDF的内容并将其编码为base64,因此我可以将它流式传输到其他地方。为了对它进行编码,我使用Apache commons Base64OutputStream类。像这样,Junit测试base64编码字符串
ByteArrayOutputStream byteOutput = new ByteArrayOutputStream();
Base64OutputStream base64Output = new Base64OutputStream(byteOutput);
List pages = pdfDocument.getDocumentCatalog().getAllPages();
Iterator iter = pages.iterator();
while (iter.hasNext()) {
PDPage page = (PDPage) iter.next();
PDResources resources = page.getResources();
Map<String, PDXObjectImage> pageImages = resources.getImages();
if (pageImages != null) {
Iterator imageIter = pageImages.keySet().iterator();
while (imageIter.hasNext()) {
String key = (String) imageIter.next();
PDXObjectImage image = (PDXObjectImage) pageImages
.get(key);
image.write2OutputStream(base64Output);
}
}
}
String base64 = new String(byteOutput.toByteArray());
它似乎是编码,但我需要通过编写一个junit测试来验证base64字符串来验证它。以下似乎并没有通过它。有什么想法吗 ?
assertTrue(content
.matches("^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{4}|[A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)$"));
预先感谢
使用Apache常见的 “assertTrue(Base64.isBase64(内容));”似乎工作得很好。有人可以澄清为什么正则表达式不起作用吗? – nixgadgets 2013-05-03 00:11:03
这确切的正则表达式适用于我,我试着做一个小的Java存根(stub)来测试它。它在Java 6和Java 7中编译并运行成功。 https://gist.github.com/melwil/5508003 – melwil 2013-05-03 11:07:28
也许你遇到换行符?或缺少'='填充?可能“+”可能会被转换为HTTP传输中的空间。 – 2013-05-03 11:37:39