臨時解決:InputStream closed in Apache FileUpload API如何閱讀內容處置標題的內容?
我想讀的內容部署頭的內容,但request.getHeader ("content-disposition")
總是返回null,request.getHeader ("content-type")
只返回第一線,像這樣multipart/form-data; boundary=AaB03x
。
Supose我收到以下標題:
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--
我想讀的所有內容處置頭。怎麼樣?
謝謝。
EDIT1:我真的想解決的問題是當客戶端發送超過最大尺寸,因爲當你調用request.getPart(「東西」),它不管什麼部分文件名稱,因爲即使請求不包含此參數名稱,它總是會拋出IllegalStateException異常。
例子:
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();
}
我不能這樣做,因爲如果客戶端發送一個超過最大尺寸getPart第一個電話會拋出異常(見getPart() Javadoc)的文件,所以我不能知道我收到了哪個文件。
這就是爲什麼我要閱讀內容處置標題。我想讀取參數「param」來知道哪個文件拋出異常。
EDIT2:嗯,與發佈Servlet 3.0規範,因爲如果一個文件拋出一個異常,則無法讀取該文件字段名,你無法控制前一種情況的API。這是使用包裝的負面部分,因爲很多功能消失了......也可以使用FileUpload動態設置MultipartConfig註釋。
如果文件超過最大文件大小,api會拋出FileSizeLimitExceededException異常。該例外提供了兩種獲取字段名稱和文件名的方法。
但是!!我的問題仍然沒有解決,因爲我想讀取與同一形式的文件一起發送的另一個參數的值。( 「參數」 的前面例子中的值)
EDIT3:我正在此。只要我寫代碼,我會在這裏發佈!
不是重複。 –