Buenas. Estoy diseñando una tienda virtual y me encuentro con el siguiente problema.
Cuando se realiza un pedido, el sistema crea un .pdf con la factura/tícket de compra y lo mete en la tabla 'factura' de la base de datos, que tiene un campo BLOB llamado 'doc'.
Ahora, lo que quiero es que cuando un usuario va a la página de su pedido, al hacer click en el hipervínculo "Ver factura" se vea el .pdf en la página. Mi ignorancia del tema de archivos binarios y flujos de datos es suprema, así que estoy teniendo bastantes problemas para deducir cómo seguir. Por el momento lo que he conseguido, a base de robar trocitos de código de distintos sitios, es que al hacer click en el hipervínculo "Ver factura" se descargue el .pdf. He aquí mi código:
try {
Connection conexion = DriverManager.getConnection( CONNECTION_URL );
Statement s = conexion.createStatement();
ResultSet rs = s.executeQuery("SELECT * FROM factura WHERE idPedido='" + request.getParameter("id") + "'");
while (rs.next()) {
Blob blob = rs.getBlob(5);
InputStream is = blob.getBinaryStream();
byte[] data = new byte[is.available()];
is.read(data);
response.setContentType("application/pdf;");
response.setHeader("Content-Disposition","attachment;filename=\"" + request.getParameter("id") + ".pdf\";");
response.setContentLength(data.length);
javax.servlet.ServletOutputStream servletoutputstream = response.getOutputStream();
servletoutputstream.write(data);
servletoutputstream.flush();
servletoutputstream.close();
}
rs.close();
s.close();
conexion.close();
} catch (Exception e) {
e.printStackTrace();
}
En resumen, lo que hace ahora al hacer click en el hipervínculo es descargar el .pdf, y lo que deseo que haga es redirigirme a una página en la que se muestra el .pdf
Me da la sensación de que hacer lo que quiero tiene que ser cosa de una o dos líneas más -ya que tengo un flujo de datos con el .pdf en sí, y lo tengo porque efectivamente se descarga correctamente, me extrañaría que no hubiera ninguna forma de plasmar ese flujo en pantalla, usando un PrintWriter o por el estilo-, el problema es que como ya he dicho tengo más bien poca idea del tema y puedo estar contento por poder descargar el fichero a estas alturas, porque me cuesta bastante entender el código.
A ver si alguien que entienda un poquito me puede echar una mano.
Gracias!