Comment puis-je lire le contenu de l'en-tête content-disposition?

TEMPORAIRE RÉSOLU: InputStream fermé dans Apache FileUpload API


Je veux lire le contenu de l'en-tête content-disposition mais request.getHeader ("content-disposition") toujours retourner la valeur null et request.getHeader ("content-type") retourne uniquement la première ligne, comme ceci multipart/form-data; boundary=AaB03x.

Supose-je recevoir l'en-tête suivant:

Content-Type: multipart/form-data; boundary=AaB03x

--AaB03x
Content-Disposition: form-data; name="submit-name"

Larry
--AaB03x
Content-Disposition: form-data; name="files"; filename="file1.txt"
Content-Type: text/plain

... contents of file1.txt ...
--AaB03x--

Je veux lire tout le contenu-disposition des en-têtes. Comment?

Grâce.


EDIT1: Ce que je veux vraiment à résoudre est le problème lorsque le client envoie un fichier dépasse la taille maximale parce que quand vous demande d'appel.getPart ("quelque chose"), il n'a pas d'importance quelle partie du nom que vous passez à elle parce qu'elle a toujours lèvera une exception IllegalStateException même si la demande ne contient pas de ce nom de paramètre.

Exemple:

Part part = request.getPart ("param");
String value = getValue (part);
if (value.equals ("1")){
    doSomethingWithFile1 (request.getPart ("file1"))
}else if (value.equals (2)){
    doSomethingWithFile2 (request.getPart ("file2"))
}

private String getValue (Part part) throws IOException{
    if (part == null) return null;

    BufferedReader in = null;
    try{
        in = new BufferedReader (new InputStreamReader (part.getInputStream (), request.getCharacterEncoding ()));
    }catch (UnsupportedEncodingException e){}

    StringBuilder value = new StringBuilder ();
    char[] buffer = new char[1024];
    for (int bytesRead; (bytesRead = in.read (buffer)) != -1;) {
        value.append (buffer, 0, bytesRead);
    }

    return value.toString ();
}

Je ne peux pas faire cela parce que si le client envoie un fichier dépasse la taille maximale que le premier appel à getPart lève l'exception (voir getPart() Javadoc), donc je ne peux pas savoir quel fichier je l'ai reçu.

C'est pourquoi je veux lire le contenu-disposition des en-têtes. Je veux lire le paramètre "param" pour savoir quel fichier a jeté l'exception.


EDIT2: eh Bien, avec l'API qui publie la Servlet 3.0 spécifications que vous ne pouvez pas contrôler le cas précédent, car si un fichier déclenche une exception vous ne pouvez pas lire le fichier nom du champ. C'est la partie négative de l'utilisation d'un wrapper parce que beaucoup de fonctionnalités disparaissent... avec FileUpload vous pouvez définir dynamiquement la MultipartConfig annotation.

Si le fichier dépasse la taille maximale des fichiers de l'api renvoie une FileSizeLimitExceededException exception. L'exception propose 2 méthodes pour obtenir le nom du champ et le nom de fichier.

Mais!! mon problème n'est pas encore résolu, car je veux lire la valeur d'un autre paramètre envoyé avec le fichier dans le même formulaire. (la valeur de "param" dans l'exemple précédent)


EDIT3: je suis en train de travailler sur ce. Dès que j'écris le code, je vais le publier ici!

  • Pas un doublon.