J'utilise trois servlets pour servir des fichiers à télécharger:servlet Java: problème avec fichier corrompu télécharger
- ByteArrayDownloadServlet: utilisé pour les petits fichiers, tels que les rapports ou les fichiers de base de données
- FileDownloadServlet: utilisé pour les petites des fichiers volumineux
- MultipleFileDownloadServlet: créer un zip avec les fichiers demandés et le diffuser
Ils sont basés dans la mise en œuvre suivante: link text
J'ai reçu plusieurs plaintes au sujet de téléchargements corrompus. Le problème est que je ne peux pas simuler ou trouver un modèle dans les erreurs:
- parfois avec de gros fichiers
- parfois lorsque l'utilisateur demande plus d'un fichier à télécharger et un fichier zip et est créé dynamiquement
- parfois avec des fichiers plus petits, mais qui sont demandées par de nombreux utilisateurs simultanément
Dans ce poste mentionné ci-dessus commentaires il y a des gens ayant signalé des problèmes similaires, mais pas de solution. Je lis aussi beaucoup de fils d'ici et plus je me suis rapproché: link text
Est-ce que quelqu'un a rencontré un problème similaire ou a un code d'exemple qui fonctionne?
Merci, Felipe
@Override
@SuppressWarnings("unchecked")
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
HttpSession session = request.getSession();
List<File> selectedFileList = (List<File>) session.getAttribute("selectedFileList");
if(selectedFileList == null)
{
response.sendError(HttpServletResponse.SC_PRECONDITION_FAILED, "Lista de arquivos não informada");
return;
}
response.reset();
response.setContentType("application/zip");
response.setHeader("Content-Disposition", "attachment; filename=\""
+ "atualizacoes_"
+ new Date().getTime() + ".zip" + "\"");
ZipOutputStream output = null;
try
{
output = new ZipOutputStream(response.getOutputStream());
for(File file : selectedFileList)
{
InputStream input = new FileInputStream(file);
output.putNextEntry(new ZipEntry(file.getName()));
byte[] buffer = new byte[DownloadHandler.DEFAULT_BUFFER_SIZE];
int length;
while((length = input.read(buffer)) > 0)
{
output.write(buffer, 0, length);
}
output.closeEntry();
input.close();
}
output.finish();
output.flush();
output.close();
}
catch(Exception e)
{
if(!(e instanceof ClientAbortException))
{
new ExceptionMail(getClass().getSimpleName(), e);
}
}
finally
{
session.removeAttribute("selectedFileList");
}
vous avez finalement découvert BalusC: http://stackoverflow.com/users/157882/balusc –
Qu'en est-il l'original 'FileServlet' avez-vous changé? Il est difficile de savoir exactement ce qui ne va pas sans code ou autres détails. –