À l'aide d'une servlet, comment voulez-vous télécharger plusieurs fichiers à partir d'une base de données et zip pour le téléchargement du client

J'ai une page jsp/servlet web app dans lequel le client peut choisir un "cours" et une "cession" par l'intermédiaire de zones de liste déroulante, puis cliquez sur un bouton pour télécharger tous les fichiers dans la base de données qui sont inscrites en vertu de ce cours/cession de combinaison. Le code de la servlet n'est pas assez de travail, comme le fichier zip n'est pas envoyé au navigateur, comme une pièce jointe. Je dois de travail code permettant de télécharger un fichier à la fois, mais quelque chose est coincé avec ce code pour la compression de fichiers. Tous les fichiers dans la base de données sont en fait des fichiers zip eux-mêmes, donc je suis en train de zip un tas de fichiers zip. Je ne pense pas que cela nécessite qu'ils soient traités différemment que les compresser n'importe quel autre format des fichiers. N'importe qui peut voir ce qui est absent? Voici ma méthode doGet code de la servlet qui gère le téléchargement. Une grande partie de ce code a été trouvé ici sur stackoverflow. Veuillez noter que le FileSubmitted objet est ma DOA contenant toutes les infos sur le fichier pour chaque fichier dans la base de données, y compris la Goutte elle-même:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
List<FileSubmitted> fileList = new ArrayList<FileSubmitted>();
String course= request.getParameter("course");
String assignment = request.getParameter("assignment");
java.sql.PreparedStatement pstmt = null;
java.sql.Connection conn = null;
ResultSet rs;
String queryString;
try {
conn = ConnectionManager.getConnection();
conn.setAutoCommit(false);
queryString = "SELECT * FROM files WHERE courseID=\""+course+"\" AND assignmentID=\""+assignment+"\";";
pstmt = conn.prepareStatement(queryString);
rs = pstmt.executeQuery(queryString);
while(rs.next())
{
fileList.add(new FileSubmitted(rs.getString("username"),
rs.getString("courseID"),
rs.getString("assignmentID"),
rs.getString("fileName"),
rs.getString("mimeType"),
(Blob) rs.getBlob("contents")));
}
response.setContentType("application/zip");
response.setHeader("Content-Disposition", "attachment; filename=\"allfiles.zip\"");
ZipOutputStream output = null;
byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
try {
output = new ZipOutputStream(new BufferedOutputStream(response.getOutputStream(), DEFAULT_BUFFER_SIZE));
for (FileSubmitted file : fileList)
{
InputStream input = null;
try {
input = new BufferedInputStream(file.getContents().getBinaryStream(), DEFAULT_BUFFER_SIZE);
output.putNextEntry(new ZipEntry(file.getFileName()));
for (int length = 0; (length = input.read(buffer)) > 0;)
{
output.write(buffer, 0, length);
}
}//try
catch (SQLException e) {e.printStackTrace();}
finally{}
output.closeEntry();
}//for
}//try
finally{}
} 
catch (Exception e1) {e1.printStackTrace();}
finally{}
}
s'il vous plaît pouvez-vous développer " quelque chose est coincé avec ce code pour la compression de fichiers est - il une erreur, avez-vous ajouté l'exploitation forestière pour voir ce qui se passe? Vous pourriez essayer d'isoler le problème, par le code postal d'une servlet et en cours d'exécution dans une méthode main avec un petit nombre de fichiers connus. Essayez de compresser les mêmes fichiers à l'aide de la ligne de commande et voir ce que les timings sont - peut-être que vos fichiers sont volumineux et il est juste de prendre beaucoup de temps.
Désolé, je me rends compte que c'était vague. Par "quelque chose est coincé", je voulais dire que je n'obtiens aucune erreur, mais le fichier zip n'est pas envoyé vers le navigateur pour le téléchargement. J'ai essayé de mettre des instructions d'impression, dans tout le code pour s'assurer que toute la méthode est en cours d'exécution, et il semble être. C'est juste pas tout à fait accomplir ce que je veux. Je vais essayer certaines de vos suggestions. Je vous remercie.

OriginalL'auteur Lani1234 | 2013-04-12