首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OutputStream到byte[]

OutputStream到byte[]
EN

Stack Overflow用户
提问于 2012-12-31 23:27:44
回答 2查看 683关注 0票数 0

我试图达到的目标是将PDF保存到Oracle数据库中的BLOB中。目前,我使用的servlet只通过HttpServletResponse发回一个pdf。

Printers.getPDFPrinter(0).printToResponse(myTemplate, response, 0, TemplateA.PDF);

我没有访问printToResponse脚本的权限,所以我不知道它是做什么的。我只知道response有一个HttpServletResponse类型,我可以从中获取OutputStream,而myTemplate实现了一个我也没有访问过的IDocument接口。

如果我可以将myTemplate或response放入一个字节数组(以便将其保存为blob),那就没问题了。然而,在我的所有搜索中,我只找到了从输入流创建字节数组的代码,而不是输出流。

有谁能帮帮忙吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-31 23:54:01

我不确定servlet使用哪个库来访问Printers.getPDFPrinter(0),但是:

  • 库可以提供printToResponse (printToStreamprintToFile,...?)以外的其他方法
  • 您可以传递自己的HttpServletResponse,在< ServletOutputStream >D10ServletOutputStream>上返回一个虚拟代码。这个虚拟子类必须通过委托给Blob.setBinaryStream(1).

的结果来实现write(int b)

如果您想编写自己的HttpServletResponse,如果servlet也应该返回您的ServletOutputStream委托原始和Blob流所需的PDF,我更喜欢从HttpServletResponseWrapper继承。

如果您希望servlet只是返回一个id,以便稍后从数据库中检索PDF,那么您需要实现自己的HttpServletResponse。在本例中,我将使用Proxy,而InvocationHandler将处理getOutputStream()

票数 0
EN

Stack Overflow用户

发布于 2012-12-31 23:35:25

该代码可能需要完整的HttpResponse,因为它还需要设置内容类型和其他一些位。尽管听起来很糟糕,但您可以创建一个“模拟”响应对象并覆盖相关方法,以便拦截其对输出流的写入。您可以为PDFWriter提供一个ByteArrayOutputStream,这样您就可以获取byte[]并将其写入到DB中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14103348

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档