Recuperar pdf

Bueno e insertado el archivo pdf en una base de datos mysql
Ahora lo que quiero es recuperrar ese archivo que he guardado en la base de datos
Alguna ayuda de como resolver ese problema o algún ejemplo gracias estoy usando netbeans
2

2 respuestas

Respuesta
1
¿Cómo lo has guardado? Según tu mismo patrón de inserción te diré como sacarlo.
Mira yo lo guardo de esta forma los archivos pdf trabajo en netbeans
package imagen;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;
public class fotoclass {
conectate con;
public fotoclass (){
con = new conectate();
}
public void guardar(String nombre, String archivo) {
{
FileInputStream fis = null;
try {
File file = new File(foto);
fis = new FileInputStream(file);
PreparedStatement pstm = con.getConnection().prepareStatement("insert into " + " archivo(nombre, arch) " + " values(?,?)");
pstm.setString(1, nombre);
pstm.setBinaryStream(2, fis,(int) file.length());
pstm.execute();
pstm.close();
} catch (FileNotFoundException ex) { Logger.getLogger(fotoclass.class.getName()).log(Level.SEVERE, null, ex); } catch (SQLException e) { System.out.println(e); } finally { try { fis.close(); } catch (IOException ex) { Logger.getLogger(fotoclass.class.getName()).log(Level.SEVERE, null, ex); } } } } }
///////////////////////////////////////
Con eso guardo el archivo pdf
Ahora lo que quiero es hacer lo siguiente haber si me entiendes
Tengo el archivo guardado lo quiero recuperar de la siguiente manera
Poner un jtextfield y un jbutton
En jtexfield poner el código y cuando clic en jbutton me muestre el archivo pdf en un visor
Alguna ayuda
Veo que ese ejemplo lo has sacado iwalito al de google jajaja yo hice uno con imágenes, guardar y recuperar imágenes de mysql, dejame ver como lo transformo a archivos. Apenas haga el ejemplo te copio el código.
Si lo saque del ejemplo que tu dices pero ya lo transforme y pude guardar archivos pdf
Ahora lo que quiero es sacar esos archivos guardados por ejemplo
Poniendo el id en un jtextbox1 y haciendo clic en un jbutton1 que me cargue el archivo y pueda visualizarlo
Yo acabo de hacer tu ejemplo y me sale este error
Data truncation: Data too long for column "archivo"
Asi que pegame tu codigo de pdf para de ahi sacarlo.
Ya me arme la sentencia de como recuperar los archivos blob del mysql, y es la siguiente
public void bajar_archivo() throws SQLException, IOException {
FileOutputStream outpu = null;
Statement st = global.createStatement();
String sql = "SELECT archivo FROM archivo where id_archivo=3";
ResultSet rs = Global.executeQuery(st, sql);
try {
rs = st.executeQuery(sql);
rs.next();
String pathname ="C:/Users/Diego/Desktop/documento_word_recuperado.docx";
File file = new File(pathname);
outpu = new FileOutputStream(file);
Blob archivo = rs.getBlob(1);
InputStream inStream = archivo.getBinaryStream();
int size = (int) archivo.length();
byte[] buffer = new byte[size];
int length = -1;
while ((length = inStream.read(buffer)) != -1) {
outpu.write(buffer, 0, length);
}
outpu.close();
} catch (Exception ioe) {
throw new IOException(ioe.getMessage());
}
}
Con eso puedo bajar los datos blob y convertirlos en archivos, lo he probado con un word, pero en el pdf me da error.
Insisto en que me pegues el código de como guardas el pdf en mysql
Ya tengo la solución a tu problema.
El código para bajar cualquier tipo de archivo (menos imágenes) del mysql, luego de tirarme toda la tarde pensando y entendiendo el google, es este
public void bajar_archivo() throws SQLException, IOException {
Statement st = global.createStatement();
String sql = "SELECT archivo FROM archivo where id_archivo=7";
ResultSet rs = Global.executeQuery(st, sql);
try {
rs.next();
String pathname ="C:/Users/Diego/Desktop/pdf_recupado.pdf";
File file = new File(pathname);
FileOutputStream output = new FileOutputStream(file);
Blob archivo = rs.getBlob(1);
InputStream inStream = archivo.getBinaryStream();
int length = -1;
int size = (int) archivo.length();
byte[] buffer = new byte[size];
while ((length = inStream.read(buffer)) != -1) {
output.write(buffer, 0, length);
// output.flush();
}
// inStream.close();
output.close();
} catch (Exception ioe) {
throw new IOException(ioe.getMessage());
}
}
Esta adaptado para bajarte el documento del cual le des el indice y guardártelo en el lugar que quieras, funciona con word, pdf, ppts...
Me podrías decir que se refiere esta linea de código
Creo que viene a ser la ruta donde se va a descargar el archivo
////////////////
String pathname ="C:/Users/Diego/Desktop/pdf_recupado.pdf";
///////////////////
Exacto, ahí se va a guardar mi archivo, ¿yo lo hice así no? Para probar que funciona la descarga del mysql, ya es solo cosa de abrir el archivo, leerlo y mostarlo en pantalla.
Estuve copiando el ultimo código que me enviaste y lo copie lo adecue a lo estaba buscando y me sale este ERROR:
///////////////////
java.io.IOException: D:\carpeta (Acceso denegado) ;
////////////////
Te copio el código que puse
public static ResultSet jalar(ResultSet rs,String ja)throws SQLException
{
st = sta(st);
String jar;
jar=(" select IM FROM archivo where NOM ='"+ja+"'") ;
rs = st.executeQuery(jar);
return rs;
}
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
String ja;
ja=(String)jTextField1.getText();
boolean encuentra=false;
try
{
conn = conexion.enlace(conn);
rs = conexion.jalar(rs,ja);
rs.next();
String pathname ="C:\\Documents and Settings\\puribe";
File file = new File(pathname);
FileOutputStream output = new FileOutputStream(file);
Blob archivo = rs.getBlob(1);
InputStream inStream = archivo.getBinaryStream();
int length = -1;
int size = (int) archivo.length();
byte[] buffer = new byte[size];
while ((length = inStream.read(buffer)) != -1) {
output.write(buffer, 0, length);
// output.flush();
}
// inStream.close();
output.close();
} catch (Exception ioe) {
try {
throw new IOException(ioe.getMessage());
} catch (IOException ex) {
Logger.getLogger(jalar.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Que extraño ya que tu guardas el archivo en
"String pathname ="C:\\Documents and Settings\\puribe";
Y el error te da en D:\Carpeta así que es algo muy extraño. Verifica bien tu codiog, en alguna parte debes tener algo que tenga que ver con el disco DE, ya que tu método hace referencia al disco C así que una cosa no tiene que ver con la otra.
Si no te sale de todas maneras mandame el proyecto java a [email protected] y te lo devuelvo corregido.
Respuesta

El post ya lleva su tiempo pero sentí la necesidad de comentar, así que pues muchas gracias a ustedes, ya logre que mi programa descargue cualquier tipo de archivo que se encuentre en la base de datos :D

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas