Maison >Java >JavaBase >Le nom du fichier est tronqué lorsque Java télécharge le fichier

Le nom du fichier est tronqué lorsque Java télécharge le fichier

王林
王林original
2019-11-23 15:04:523383parcourir

Le nom du fichier est tronqué lorsque Java télécharge le fichier

Fonction de téléchargement de fichiers de développement Web (le code est le suivant). Si le nom du fichier contient des caractères chinois, il apparaîtra souvent tronqué et devra être encodé.

String fileName = "测试文件.doc";
try {
    HttpServletResponse response = 
    (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();
    response.setHeader("Content-disposition", "attachment; filename=" + fileName);
    response.setContentLength((int) file.length());
    response.setContentType("application/octet-stream;charset=UTF-8");
    byte[] b = new byte[1024];
    int i = 0;
    FileInputStream fis = new FileInputStream(file);
    ServletOutputStream out = response.getOutputStream();
    while ((i = fis.read(b)) > 0) {
        out.write(b, 0, i);
    }
    out.flush();
    out.close;
    fis.close();
} catch (IOException e) {
    e.printStackTrace();
}
FacesContext.getCurrentInstance().responseComplete();
return null;

Option 1 : Encoder le nom du fichier en Unicode

fileName = URLEncoder.encode(fileName, "UTF-8");

Le nom du fichier sera converti en encodage Unicode Le test est normal sous le navigateur IE, mais sous. le navigateur Firefox Le nom du fichier obtenu par le test est Unicode sans décodage.

Option 2 : Encodez le nom du fichier en ISO-8859-1

fileName = new String(fileName.getBytes("UTF-8"), "ISO-8859-1");

Cette méthode peut obtenir des fichiers avec des noms de fichiers chinois sous IE et Firefox. Mais s'il y a des espaces dans le nom du fichier, Firefox tronquera le nom du fichier à partir des espaces et vous devrez remplacer les espaces dans le nom du fichier par des caractères visibles tels que des traits de soulignement avant l'encodage.

fileName = new String(fileName.replace(" ", "_").getBytes("UTF-8"), "ISO-8859-1");

Option 3 : Incompatibilité du navigateur

Dans le développement Web Java, le problème des noms de fichiers tronqués dans les fonctions de téléchargement de fichiers est souvent rencontré. Différents navigateurs proposent différentes solutions à ce problème.

Pour IE, le nom de fichier est codé en UTF8 via URLEncoder, tandis que les autres navigateurs (Firefox, Chrome, Safari, Opera) doivent convertir les octets en ISO8859-1.

if (request.getHeader("User-Agent").toUpperCase().indexOf("MSIE") > 0) {
    filename = URLEncoder.encode(filename, "UTF-8");
} else {
    filename = new String(filename.getBytes("UTF-8"), "ISO8859-1");
}

Tutoriel recommandé : Introduction au développement Java

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn