À 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{}
}
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
Vous devez vous connecter pour publier un commentaire.
Dans le cas où cela peut être utile à quelqu'un d'autre, j'ai trouvé la réponse au problème. Le code affiché ci-dessus fonctionne parfaitement pour télécharger plusieurs fichiers à partir d'une base de données et la création d'un fichier zip pour le client à télécharger. Le problème était que j'étais l'appel de la servlet via ajax, et apparemment, vous ne pouvez pas télécharger des fichiers via un appel ajax. J'ai donc modifié ma page jsp à l'appel de la servlet via l'envoi d'un formulaire, puis le téléchargement est venu pour le navigateur parfaitement.
OriginalL'auteur Lani1234
D'abord créer un fichier zip qui contient tous les fichiers zip.
Utilisation
ServletOutputStream
au lieu deZipOutputStream
.Ensuite utiliser le code ci-dessous
Vous devez créer le fichier zip que vous souhaitez télécharger le col, le nom de
String filename
.OriginalL'auteur Kiran Jujare