2010-11-29 36 views
2

J'utilise une servlet pour accéder aux données MySQL. J'ai déjà le code pour envoyer le fichier de la servlet à la réponse. Qu'est-ce que je ne sais pas, c'est comment je suis censé l'attraper avec javascript, parce que je ne fais pas cet appel par soumettre. Je ne veux pas recharger la page du trou.Comment puis-je télécharger un BLOB de MySQL en utilisant Servlets et AJAX?

J'ai essayé de faire une fenêtre.open au servlet, en envoyant tous les paramètres par URL, mais cela ouvre seulement une page vierge.

+0

Pouvez-vous envoyer votre code javascript afin que je puisse voir où votre erreur est peut-être? –

Répondre

0

Ok, pour télécharger le fichier, je viens interroger le fichier blob puis:

try{ 
    ServletOutputStream output = response.getOutputStream(); 
    stmt = (Statement) c.createStatement(); 
    rs = stmt.executeQuery(query); 
    if (rs.next()) { 
    fl = (Blob) rs.getBlob(1); 
    } else { 
     System.out.println("No se pudo descargar el archivo"); 
    } 

    InputStream in = fl.getBinaryStream(); 
    int length = (int) fl.length(); 

    response.reset(); 
    //response.setContentType("multipart/mixed"); 
    //if(rs.getString(3).toLowerCase().equals("mp3") || rs.getString(3).toLowerCase().equals("mpeg")) 
     response.setContentType(getMime(rs.getString(2))); 
    response.setHeader("Content-Length: ",Integer.toString(length)); 
    response.setHeader("Content-disposition","attachment; filename=" + rs.getString(2)); 

    byte[] buf = new byte[1024]; 

while ((length = in.read(buf)) > 0){ 
    output.write(buf, 0, length); 
} 
    output.close(); 
    in.close(); 
    rs.close(); 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
+1

Ne pas oublier 'fl.free()' –