BLOB 型をバイトに変換するにはどうすればよいですか?
JPA@Lob
のプロパティに注釈を付けるだけです。byte[]
@Entity
どうすればこの種の作業を行うことができますか?
エンティティ ID をリクエスト パラメータとして使用して、JSF に必要なリンクをテーブルに生成させる必要があります。
<h:dataTable value="#{bean.entities}" var="entity">
<h:column>
<h:outputLink value="#{request.contextPath}/fileservlet?id=#{entity.id}" target="_blank">#{entity.filename}</h:outputLink>
<h:column>
</h:dataTable>
次に、 を応答にストリーミングする単純なファイル サーブレットを作成します(明らかなパラメーターの検証と例外処理は省略されています)。byte[]
doGet()
@WebServlet("/fileservlet")
public class FileServlet extends HttpServlet {
@EJB
private EntityService service;
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Entity entity = service.find(request.getParameter("id"));
response.setContentType(entity.getContentType());
response.setContentLength(entity.getContent().length);
response.setHeader("Content-Disposition", "inline;filename=\"" + URLEncoder.encode(entity.getFilename(), "UTF-8") + "\"");
response.getOutputStream().write(entity.getContent());
}
}
プロパティをgetContent()
返し@Lob byte[]
ます。