martinc 2002/07/30 23:43:18 Modified: src/share/org/apache/struts/upload CommonsMultipartRequestHandler.java Log: Fix a compatibility issue with DiskMultipartRequestHandler, so that FormFile.getFileName() returns the base file name, instead of the full (client-relative, and therefore not useful) path to the uploaded file. Submitted by: Erich Meier Revision Changes Path 1.2 +38 -5 jakarta-struts/src/share/org/apache/struts/upload/CommonsMultipartRequestHandler.java Index: CommonsMultipartRequestHandler.java =================================================================== RCS file: /home/cvs/jakarta-struts/src/share/org/apache/struts/upload/CommonsMultipartRequestHandler.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- CommonsMultipartRequestHandler.java 27 Jul 2002 21:53:13 -0000 1.1 +++ CommonsMultipartRequestHandler.java 31 Jul 2002 06:43:18 -0000 1.2 @@ -545,7 +545,7 @@ * @return The client-size file name. */ public String getFileName() { - return fileItem.getName(); + return getBaseFileName(fileItem.getName()); } @@ -599,6 +599,39 @@ */ public void destroy() { fileItem.delete(); + } + + + /** + * Returns the base file name from the supplied file path. On the surface, + * this would appear to be a trivial task. Apparently, however, some Linux + * JDKs do not implement <code>File.getName()</code> correctly for Windows + * paths, so we attempt to take care of that here. + * + * @param filePath The full path to the file. + * + * @return The base file name, from the end of the path. + */ + protected String getBaseFileName(String filePath) { + + // First, ask the JDK for the base file name. + String fileName = new File(filePath).getName(); + + // Now check for a Windows file name parsed incorrectly. + int colonIndex = fileName.indexOf(":"); + if (colonIndex == -1) { + // Check for a Windows SMB file path. + colonIndex = fileName.indexOf("\\\\"); + } + int backslashIndex = fileName.lastIndexOf("\\"); + + if (colonIndex > -1 && backslashIndex > -1) { + // Consider this filename to be a full Windows path, and parse it + // accordingly to retrieve just the base file name. + fileName = fileName.substring(backslashIndex + 1); + } + + return fileName; } } }
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>