TEMPORARY SOLVED: InputStream closed in Apache FileUpload API
I want to read the content of the content-disposition header but request.getHeader ("content-disposition")
always return null and request.getHeader ("content-type")
only returns the first line, like this multipart/form-data; boundary=AaB03x
.
Supose I receive the following header:
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--
I want to read all the content-disposition headers. How?
Thanks.
EDIT1: What I really want to solve is the problem when the client sends a file that exceeds the maximum size because when you call request.getPart ("something") it doesn't matter what part name you pass to it because it always will throw an IllegalStateException even if the request does not contain this parameter name.
Example:
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 ();
}
I can't do this because if the client sends a file that exceeds the max size the first call to getPart will throw the exception (see getPart() Javadoc), so I can't know which file I've received.
That's why I want to read the content-disposition headers. I want to read the parameter "param" to know which file has thrown the exception.
EDIT2: Well, with the API that publishes the Servlet 3.0 specification you can't control the previous case because if a file throws an exception you can't read the file field name. This is the negative part of using a wrapper because a lot of functionalities disappear... Also with FileUpload you can dynamically set the MultipartConfig annotation.
If the file exceeds the maximum file size the api throws a FileSizeLimitExceededException exception. The exception provides 2 methods to get the field name and the file name.
But!! my problem is not still solved because I want to read the value of another parameter sent together with the file in the same form. (the value of "param" in the previous example)
EDIT3: I'm working on this. As soon as I write the code I'll publish it here!