blobフィールドに保存されているp7mpdfファイルを取得し、特定のURLを指定して直接ダウンロードできるようにする必要があります。
現在、PDFの取得と公開に次のコードを使用していますが、デジタル署名を表示するためのツールで保存されたファイルを開くと、署名が無効であり、PDFが破損しているようです。
public byte[] getPdfOrdini(String xxx, String tipo) throws Exception, SQLException {
Blob pdf;
byte[] pdfData = null;
Connection conn = new test().getConnectionOrdini();
PreparedStatement pstmt = null;
// Query
if(tipo.equalsIgnoreCase("pnf"))
pstmt = conn.prepareStatement("Select ... From .. Where ..");
if(tipo.equalsIgnoreCase("pf"))
pstmt = conn.prepareStatement("Select ... From .. Where .. = ?");
pstmt.setString(1, xxx);
ResultSet rset = pstmt.executeQuery();
if(tipo.equalsIgnoreCase("pnf")){
while (rset.next()) {
pdf = rset.getBlob(1);
pdfData = pdf.getBytes(1, (int) pdf.length());
}
//System.out.println("dimensione blob --> " + pdfData.length);
}else{
while (rset.next()) {
pdf = rset.getBlob(1);
pdfData = pdf.getBytes(1, (int) pdf.length());
}
}
rset.close();
pstmt.close();
return pdfData;
}
ダウンロード用のPDFを公開するためのこのコード:
<jsp:useBean id="PDF" class="pdf.test" scope="session" />
<%
Connection conn = null;
if ( request.getParameter("protocollo") != null )
{
String protocollo = request.getParameter("xxx") ;
String tipo = request.getParameter("type");
try
{
String downloadFileName = "O" + xxx + ".pdf.p7m";
conn = new pdf.test().getConnection();
conn.setAutoCommit (false);
// get the image from the database
byte[] pdfData = PDF.getPdfOrdini(xxx, tipo);
// display the image
File pdf = new File(downloadFileName);
FileOutputStream fos = new FileOutputStream(pdf);
fos.write(pdfData);
fos.flush();
fos.close();
response.setContentType( "application/x-download" );
response.setHeader( "Content-Disposition", "attachment; filename=" + downloadFileName );
conn.close();
}
catch (IllegalStateException il){
}
catch (Exception e)
{
e.printStackTrace();
throw e;
}
finally
{
}
}
%>
どんな助けでも大歓迎です。