Hello,
If there are more than 2 file input field with same name and
in case of 1st attached file exists and 2nd is empty
like
<tr>
<td>attached file 1 </td>
<td><input type="file" name="file" size="30"></td>
</tr>
<tr>
<td>attached file 2 </td>
<td><input type="file" name="file" size="30"></td>
</tr>
Then
FileItem[] f_item = data.getParameters().getFileItems("file");
throws following Exception
java.lang.ClassCastException: java.lang.Object
at
org.apache.turbine.util.parser.BaseValueParser.getStrings(BaseValueParser.java:947)
at org.apache.turbine.util.parser.BaseValueParser.append(BaseValueParser.java:296)
at
org.apache.turbine.services.upload.TurbineUploadService.parseRequest(TurbineUploadService.java:217)
Because the attached file name is null , The 2nd treatment will go through form field
treatment.
But ParameterParser has occupied by name "file" already with a FileItem of the 1st
attached file not a String
Thanks,
youngho
Index: TurbineUploadService.java
===================================================================
RCS file:
/home/cvspublic/jakarta-turbine-2/src/java/org/apache/turbine/services/upload/TurbineUploadService.java,v
retrieving revision 1.1.1.1
diff -u -r1.1.1.1 TurbineUploadService.java
--- TurbineUploadService.java 2001/08/16 05:09:24 1.1.1.1
+++ TurbineUploadService.java 2001/11/17 06:19:10
@@ -184,36 +184,29 @@
}
else
{
+ FileItem item = createItem(path, headers,
+ requestSize);
+ OutputStream os = item.getOutputStream();
+ try
+ {
+ multi.readBodyData(os);
+ }
+ finally
+ {
+ os.close();
+ }
+
if (getFileName(headers) != null)
{
// A single file.
- FileItem item = createItem(path, headers,
- requestSize);
- OutputStream os = item.getOutputStream();
- try
- {
- multi.readBodyData(os);
- }
- finally
- {
- os.close();
- }
- params.append(getFieldName(headers), item);
+ if( item.getSize() > 0 )
+ {
+ params.append(getFieldName(headers), item);
+ }
}
else
{
// A form field.
- FileItem item = createItem(path, headers,
- requestSize);
- OutputStream os = item.getOutputStream();
- try
- {
- multi.readBodyData(os);
- }
- finally
- {
- os.close();
- }
params.append(getFieldName(headers),
new String(item.get()));
}
@@ -248,13 +241,19 @@
{
int start = cd.indexOf("filename=\"");
int end = cd.indexOf('"', start + 10);
- if(start != -1 && end != -1 && (start + 10) != end)
+ if(start != -1 && end != -1 )
{
String str = cd.substring(start + 10, end).trim();
if (str.length() > 0)
{
fileName = str;
}
+ else
+ {
+ // need some name even if there is no attached file
+ // in order to go through a file add routine
+ fileName = "empty";
+ }
}
}
return fileName;