TEMPORAL resuelto:InputStream closed in Apache FileUpload API¿Cómo puedo leer el contenido del encabezado de disposición de contenido?
quiero leer el contenido de la cabecera Content-Disposition pero request.getHeader ("content-disposition")
siempre vuelven nulos y request.getHeader ("content-type")
sólo se devuelve la primera línea, como este multipart/form-data; boundary=AaB03x
.
supose recibo el siguiente encabezado:
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--
quiero leer todas las cabeceras Content-Disposition. ¿Cómo?
Gracias.
EDIT1: Lo que realmente deseo de resolver el problema es cuando el cliente envía un archivo que supera el tamaño máximo, ya que cuando se llama a request.getPart ("algo") no importa qué parte nombre que le pasa porque siempre lanzará una IllegalStateException incluso si la solicitud no contiene este nombre de parámetro.
Ejemplo:
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();
}
no puedo hacer esto porque si el cliente envía un archivo que supera el tamaño máximo de la primera llamada a getPart lanzará la excepción (ver getPart() Javadoc), por lo que no puede saber qué archivo he recibido
Es por eso que quiero leer los encabezados de disposición de contenido. Quiero leer el parámetro "param" para saber qué archivo ha arrojado la excepción.
Edit2: Bueno, con la API que publica la especificación Servlet 3.0 que no puede controlar el caso anterior, porque si un archivo se produce una excepción no se puede leer el nombre del campo de archivos. Esta es la parte negativa del uso de un contenedor porque muchas funcionalidades desaparecen ... También con FileUpload puede establecer dinámicamente la anotación MultipartConfig.
Si el archivo excede el tamaño máximo de archivo, la API arroja una excepción FileSizeLimitExceededException. La excepción proporciona 2 métodos para obtener el nombre del campo y el nombre del archivo.
Pero !! mi problema aún no está resuelto porque Quiero leer el valor de otro parámetro enviado junto con el archivo en la misma forma. (el valor de "parámetro" en el ejemplo anterior)
Edit3: Estoy trabajando en esto. ¡Tan pronto como escriba el código lo publicaré aquí!
No es un duplicado. –