Maison > Java > JavaBase > Introduction aux solutions aux noms de fichiers tronqués dans les téléchargements Java

Introduction aux solutions aux noms de fichiers tronqués dans les téléchargements Java

Libérer: 2019-12-03 10:53:54
original
1978 Les gens l'ont consulté

Introduction aux solutions aux noms de fichiers tronqués dans les téléchargements Java

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

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;
Copier après la connexion

Option 1 : Encoder le nom du fichier en Unicode

fileName = URLEncoder.encode(fileName, "UTF-8");
Copier après la connexion

Le nom du fichier sera converti en codage Unicode (%E6%B5 %8B %E8%AF%95%E6%96%87%E4%BB%B6.doc), le test est normal sous le navigateur IE, mais le nom de fichier obtenu lors du test sous le navigateur Firefox est Unicode non décodé.

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

fileName = new String(fileName.getBytes("UTF-8"), "ISO-8859-1");
Copier après la connexion

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");
Copier après la connexion

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, UTF8 encode le nom de fichier via URLEncoder.

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");
}
Copier après la connexion

Pour plus de connaissances sur Java, veuillez faire attention à la colonne Tutoriel de base 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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal