Firefox coupe les fichiers, dont le nom contient des espaces, dans une application Struts

StackOverflow https://stackoverflow.com/questions/177863

  •  05-07-2019
  •  | 
  •  

Question

J'utilise le prochain cours (simplifié pour des raisons de compréhensibilité) pour télécharger des images dans une application Web Struts. Cela fonctionne très bien dans tous les navigateurs sauf Firefox, qui supprime les noms contenant des espaces. C’est-à-dire que: fichier avec spaces.pdf est téléchargé dans Firefox sous: fichier , alors qu’en chrome, IE7 IE6 est téléchargé en tant que fichier avec spaces.pdf .

public class Download extends Action {
    private static final int BUFFER_SIZE = 4096;    

    public ActionForward execute(ActionMapping mapping,
        ActionForm     form,
        HttpServletRequest request,
        HttpServletResponse response) throws Exception {
        String filename = "file with spaces.pdf";
        File file =  ... // variable containing the file;
        response.setStatus(HttpServletResponse.SC_OK);
        response.setContentType(getMimeType(request, file));
        response.setHeader("Content-Type", getMimeType(request, file));
        response.setHeader("Content-Disposition","attachment; filename="+ filename);
        InputStream is = new FileInputStream(file); 
        sendFile(is, response);
        return null;
   }  

   protected String getMimeType(HttpServletRequest request, File file) {
        ServletContext application = super.servlet.getServletContext();
        return application.getMimeType(file.getName());
   }

   protected void sendFile(InputStream is, HttpServletResponse response) throws IOException {
       BufferedInputStream in = null;
       try {
            int count;
            byte[] buffer = new byte[BUFFER_SIZE];
            in = new BufferedInputStream(is);
            ServletOutputStream out = response.getOutputStream();
            while(-1 != (count = in.read(buffer)))
                out.write(buffer, 0, count);
            out.flush();            
       } catch (IOException ioe) { 
            System.err.println("IOException in Download::sendFile"); 
            ioe.printStackTrace();
       } finally {
            if (in != null) {
                try { 
                   in.close(); 
                } catch (IOException ioe) { ioe.printStackTrace(); }
            }   
       }
    }
}

Quelqu'un sait-il ce qui se passe ici? Remarque J'utilise Firefox 3.0.3 sous Windows Vista.

Était-ce utile?

La solution

Le nom du fichier doit être une chaîne entre guillemets . (Selon la la section 19.5.1 de la RFC 2616 )

response.setHeader("Content-Disposition","attachment; filename=\"" + filename + "\"");

Autres conseils

URLEncode le nom du fichier?

Ou au moins substituez% 20 au caractère espace.

(Je ne sais pas si cela fonctionnera, mais essayez-le)

avez-vous simplement essayé de mettre des guillemets autour du nom de fichier?

C’est une fonctionnalité de sécurité de Firefox 3, je crois.

Nous y voilà

http://support.mozilla.com/tiki -view_forum_thread.php? locale = no & forumId = 1 & comments; commentaire_parentId = 91513

C’est différent, mais cela pourrait aider:)

Profitez

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top