我想將pdf轉換爲appengine中的圖像文件。理想情況下,我會將pdf上傳爲blob,並存儲pdf和pdf的圖像。轉換也可以在不同的時間完成(taskqueue)。Appengine轉換Api(java)
我還沒有找到任何工作樣本或做這件事的好文件。
官方文檔是here。這是我在我的上傳servlet上的實現。
@SuppressWarnings("serial")
public class UploadBlobServlet extends HttpServlet {
private static final Logger log = Logger.getLogger(UploadBlobServlet.class.getName());
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
Map<String, BlobKey> blobs = blobstoreService.getUploadedBlobs(req);
BlobKey blobKey = blobs.get("data");
log.log(Level.WARNING,"blobKey: "+blobKey.getKeyString());
if (blobKey != null) {
resp.getWriter().println(blobKey.getKeyString());
BlobstoreInputStream in=new BlobstoreInputStream(blobKey);
byte[] b = IOUtils.toByteArray(is);
// try{
in.read(b);
Asset asset = new Asset(
"application/pdf", b, "testfile.pdf");
Document document = new Document(asset);
Conversion conversion = new Conversion(document, "image/png");
ConversionService service =
ConversionServiceFactory.getConversionService();
ConversionResult result = service.convert(conversion);
if (result.success()) {
// Note: in most cases, we will return data all in one asset,
// except that we return multiple assets for multi-page images.
FileService fileService=FileServiceFactory.getFileService();
for (Asset ass : result.getOutputDoc().getAssets()) {
AppEngineFile file=fileService.createNewBlobFile("image/png", "testfile.png");
FileWriteChannel writeChannel=fileService.openWriteChannel(file, false);
writeChannel.write(ByteBuffer.wrap(b));
writeChannel.closeFinally();
}
} else {
log.log(Level.WARNING,"error");
}
更新:是否加入字節[] = IOUtils.toByteArray(是);並仍然得到NPE ...
我也很好奇轉換的質量,如果任何人有經驗。
我已經添加了我嘗試過的東西的源代碼。現在爲blobstoreinputstream獲取空值。 – Patrick 2012-07-17 00:32:17
你確定InputStream爲空。我會說,你得到的NullPointerException是因爲你傳遞一個空數組到read方法(參見http://docs.oracle.com/javase/6/docs/api/java/io/InputStream.html#read (字節[]))。你需要閱讀大塊,請參閱http://stackoverflow.com/questions/1264709/convert-inputstream-to-byte-in-java的第二位。 – 2012-07-17 00:51:55
好吧,關於null傳入......呃!我用IOUtils.toByteArray(is)更新了代碼;並仍在獲得NPE。將不得不挖更多一點... – Patrick 2012-07-17 01:30:13