Return-Path: Delivered-To: apmail-jakarta-commons-user-archive@www.apache.org Received: (qmail 64511 invoked from network); 6 May 2005 15:59:26 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 6 May 2005 15:59:26 -0000 Received: (qmail 75698 invoked by uid 500); 6 May 2005 15:48:23 -0000 Delivered-To: apmail-jakarta-commons-user-archive@jakarta.apache.org Received: (qmail 75632 invoked by uid 500); 6 May 2005 15:48:22 -0000 Mailing-List: contact commons-user-help@jakarta.apache.org; run by ezmlm Precedence: bulk List-Unsubscribe: List-Subscribe: List-Help: List-Post: List-Id: "Jakarta Commons Users List" Reply-To: "Jakarta Commons Users List" Delivered-To: mailing list commons-user@jakarta.apache.org Received: (qmail 75602 invoked by uid 99); 6 May 2005 15:48:22 -0000 X-ASF-Spam-Status: No, hits=0.0 required=10.0 tests=RCVD_BY_IP X-Spam-Check-By: apache.org Received-SPF: pass (hermes.apache.org: domain of dakota.jack@gmail.com designates 64.233.162.199 as permitted sender) Received: from zproxy.gmail.com (HELO zproxy.gmail.com) (64.233.162.199) by apache.org (qpsmtpd/0.28) with ESMTP; Fri, 06 May 2005 08:48:21 -0700 Received: by zproxy.gmail.com with SMTP id 18so1330094nzp for ; Fri, 06 May 2005 08:45:20 -0700 (PDT) DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=beta; d=gmail.com; h=received:message-id:date:from:reply-to:to:subject:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; b=V4mz9YR4E1q/pTI10OlYQsDQJqblWNCcI41M4hDXzP2nSAGpe1X4Q4gWBpy14fxBL+iKkRokg0d1OhwUXYC49dDyPtVGno71EPMXMdRYMf8pUPl93Dp5X5bdcz1A09JmHb2AFp/JO13hLHeVx2EFXps8tUdEh14bEyFT1RBZr7k= Received: by 10.36.103.11 with SMTP id a11mr619418nzc; Fri, 06 May 2005 08:45:16 -0700 (PDT) Received: by 10.36.105.17 with HTTP; Fri, 6 May 2005 08:45:15 -0700 (PDT) Message-ID: Date: Fri, 6 May 2005 08:45:15 -0700 From: Dakota Jack Reply-To: Dakota Jack To: Jakarta Commons Users List , m.knezevic@porta.de Subject: Re: [FileUpload] Getting wrong filename from FileItem In-Reply-To: Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline References: <201E6F5AC48C274996A5AD8304FAEF860144ED@p001ex03.porta.local> <200505061613.00227.m.knezevic@porta.de> X-Virus-Checked: Checked X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N I have done a bit more testing, Mihael, with interesting results. The name of the file in the String is very important. From public class Test { public static void main(String [] params) throws Exception { =20 System.out.println("-------- Test C\\Windows\\Temp\\myfile.txt --------= --"); System.out.println("Windows getName: " + new File("C\\Windows\\Temp\\myfile.txt").getName()); System.out.println("Windows getPath: " + new File("C\\Windows\\Temp\\myfile.txt").getPath()); System.out.println("Windows getAbsoluteFile: " + new File("C\\Windows\\Temp\\myfile.txt").getAbsoluteFile()); System.out.println("Windows getAbsolutePath: " + new File("C\\Windows\\Temp\\myfile.txt").getAbsolutePath()); System.out.println("Windows getCanonicalFile: " + new File("C\\Windows\\Temp\\myfile.txt").getCanonicalFile()); System.out.println("Windows getCanonicalPath: " + new File("C\\Windows\\Temp\\myfile.txt").getCanonicalPath()); System.out.println("-------- Test C:\\Windows\\Temp\\myfile.txt ----------"); System.out.println("Windows getName: " + new File("C:\\Windows\\Temp\\myfile.txt").getName()); System.out.println("Windows getPath: " + new File("C:\\Windows\\Temp\\myfile.txt").getPath()); System.out.println("Windows getAbsoluteFile: " + new File("C:\\Windows\\Temp\\myfile.txt").getAbsoluteFile()); System.out.println("Windows getAbsolutePath: " + new File("C:\\Windows\\Temp\\myfile.txt").getAbsolutePath()); System.out.println("Windows getCanonicalFile: " + new File("C:\\Windows\\Temp\\myfile.txt").getCanonicalFile()); System.out.println("Windows getCanonicalPath: " + new File("C:\\Windows\\Temp\\myfile.txt").getCanonicalPath()); System.out.println("-------- Test \\C:\\Windows\\Temp\\myfile.txt ----------"); System.out.println("Windows getName: " + new File("\\C:\\Windows\\Temp\\myfile.txt").getName()); System.out.println("Windows getPath: " + new File("\\C:\\Windows\\Temp\\myfile.txt").getPath()); System.out.println("Windows getAbsoluteFile: " + new File("\\C:\\Windows\\Temp\\myfile.txt").getAbsoluteFile()); System.out.println("Windows getAbsolutePath: " + new File("\\C:\\Windows\\Temp\\myfile.txt").getAbsolutePath()); System.out.println("Windows getCanonicalFile: " + new File("\\C:\\Windows\\Temp\\myfile.txt").getCanonicalFile()); System.out.println("Windows getCanonicalPath: " + new File("\\C:\\Windows\\Temp\\myfile.txt").getCanonicalPath()); System.out.println("Linux getName: " + new File("/tmp/myfile.txt").getName()); System.out.println("Linux getPath: " + new File("/tmp/myfile.txt").getPath()); System.out.println("Linux getAbsoluteFile: " + new File("/tmp/myfile.txt").getAbsoluteFile()); System.out.println("Linux getAbsolutePath: " + new File("/tmp/myfile.txt").getAbsolutePath()); System.out.println("Linux getCanonicalFile: " + new File("/tmp/myfile.txt").getCanonicalFile()); System.out.println("Linux getCanonicalPath: " + new File("/tmp/myfile.txt").getCanonicalPath()); System.out.println("-------- End ----------"); System.exit(0); } } I got these results: -------- Test C\Windows\Temp\myfile.txt ---------- Windows getName: myfile.txt Windows getPath: C\Windows\Temp\myfile.txt Windows getAbsoluteFile: C:\crackwillow\webapps\ROOT\WEB-INF\classes\com\crackwillow\testing\C\Windo= ws\Temp\myfile.txt Windows getAbsolutePath: C:\crackwillow\webapps\ROOT\WEB-INF\classes\com\crackwillow\testing\C\Windo= ws\Temp\myfile.txt Windows getCanonicalFile: C:\crackwillow\webapps\ROOT\WEB-INF\classes\com\crackwillow\testing\C\Windo= ws\Temp\myfile.txt Windows getCanonicalPath: C:\crackwillow\webapps\ROOT\WEB-INF\classes\com\crackwillow\testing\C\Windo= ws\Temp\myfile.txt -------- Test C:\Windows\Temp\myfile.txt ---------- Windows getName: myfile.txt Windows getPath: C:\Windows\Temp\myfile.txt Windows getAbsoluteFile: C:\Windows\Temp\myfile.txt Windows getAbsolutePath: C:\Windows\Temp\myfile.txt Windows getCanonicalFile: C:\WINDOWS\Temp\myfile.txt Windows getCanonicalPath: C:\WINDOWS\Temp\myfile.txt -------- Test \C:\Windows\Temp\myfile.txt ---------- Windows getName: myfile.txt Windows getPath: C:\Windows\Temp\myfile.txt Windows getAbsoluteFile: C:\Windows\Temp\myfile.txt Windows getAbsolutePath: C:\Windows\Temp\myfile.txt Windows getCanonicalFile: C:\WINDOWS\Temp\myfile.txt Windows getCanonicalPath: C:\WINDOWS\Temp\myfile.txt Linux getName: myfile.txt Linux getPath: \tmp\myfile.txt Linux getAbsoluteFile: C:\tmp\myfile.txt Linux getAbsolutePath: C:\tmp\myfile.txt Linux getCanonicalFile: C:\tmp\myfile.txt Linux getCanonicalPath: C:\tmp\myfile.txt -------- End ---------- On 5/6/05, Dakota Jack wrote: > The File class definitely does not "take the local file separator", > Mihael. It normalizes the String, which does not include a file > separator at all. Either the normalization is not working, which > would be very odd, or your errors in the file name are what is causing > the problem. At least that is what I think. My setup worked with > your code, however, so I don't know what is up. >=20 > Anyone have an idea on this? >=20 > On 5/6/05, Mihael Knezevic wrote: > > got some time for the testing now. > > > > my test env: > > Debian GNU/Linux 3.0 Sarge > > Java HotSpot(TM) Client VM (build 1.4.2_06-b03, mixed mode) > > > > my code: > > System.out.println("-------- Test ----------"); > > System.out.println("Windows file name: " + new > > File("C\\Windows\\Temp\\myfile.txt").getName()); > > System.out.println("Linux file name: " + new > > File("/tmp/myfile.txt").getName()); > > System.out.println("-------- End ----------"); > > > > my output: > > -------- Test ---------- > > Windows file name: C:\Windows\Temp\myfile.txt > > Linux file name: myfile.txt > > -------- End ---------- > > > > and it is as i expected. it takes the local file separator which is not= in the > > windows file name. so it returns the absolute file name IMO. > > > > Am Freitag, 6. Mai 2005 09:54 schrieb Dakota Jack: > > > I tested it out on both file separators (linux and microsoft) and it > > > works on both. Just run a test and see if it works. It does > > > > > > > > > public class Test { > > > public static void main(String [] params) { > > > File ie =3D new File("C:\\mydir\\myfile.txt"); > > > File linux =3D new File("/mydir/myfile.txt"); > > > StdOut.log("log.development","Test ttf ie.getName() =3D " + ie.ge= tName()); > > > StdOut.log("log.development","Test ttf linux.getName() =3D " + > > > linux.getName()); > > > } > > > > > > You should just use System.out.println() of course. > > > > > > > > > On 5/6/05, Knezevic, Mihael wrote: > > > > i can not figure out how this should work. this is a web applicatio= n. > > linux and windows clients are accessing the app. the filename can > > be /mydir/myfile.txt and C:\mydir\myfile.txt. how should the server kno= w > > which file separator to use. hmm. i could take a look at the http reque= st > > data. ain't there a field for the operating system. but that ain't some= thing > > i like to do. these things are always changing. > > > > > > > > i'll try your code later. thanks. > > > > > > > > > -----Urspr=FCngliche Nachricht----- > > > > > Von: Dakota Jack [mailto:dakota.jack@gmail.com] > > > > > Gesendet: Freitag, 6. Mai 2005 09:34 > > > > > An: Jakarta Commons Users List > > > > > Betreff: Re: [FileUpload] Getting wrong filename from FileItem > > > > > > > > > > This code should definitely work. If it does not, I sure > > > > > would like to know what happens. What did happen? Did you debug= it? > > > > > > > > > > > > > > > > > > > > On 5/6/05, Knezevic, Mihael wrote: > > > > > > > > > > > > > > > > > > > -----Urspr=FCngliche Nachricht----- > > > > > > > Von: Dakota Jack [mailto:dakota.jack@gmail.com] > > > > > > > Gesendet: Freitag, 6. Mai 2005 08:51 > > > > > > > An: Jakarta Commons Users List; Knezevic, Mihael > > > > > > > Betreff: Re: [FileUpload] Getting wrong filename from FileIte= m > > > > > > > > > > > > > > Just so there is no misunderstanding, the browsers have > > > > > nothing to > > > > > > > do with what getName returns. The browsers differ in > > > > > what name they > > > > > > > provide for the file. Thus, when you get a File object for I= E it > > > > > > > gives the full name and for the others the actual file > > > > > name itself. > > > > > > thanks for the extra explanation. it's what i understood in > > > > > the first place (no offense on this one). > > > > > > > > > > > > > > > > > > > You make them all the same if you change commonsupload to giv= e you > > > > > > > file,getName() rather than just file. > > > > > > > > > > > > > > > > > > > > > > > > > > > > // Just add this to the "protected String getFileName(Map > > > > > > > headers)" method in FileUploadBase > > > > > > > if(fileName !=3D null) { > > > > > > > fileName =3D new java.io.File(fileName).getName(); > > > > > > > } > > > > > > > > > > > > tried that in the first place in my programm. but as the > > > > > filename is something like C:\mydir\myfile.txt (windows file > > > > > path) it doesn't seem to work on the linux server i'm > > > > > running. file separators are different. correct me if i'm wrong. > > > > > > > > > > > > windows client (ie) returns C:\mydir\myfile.txt to my linux > > > > > server. on linux the file separator is a slash ( / ) and not > > > > > a backslash ( \ ). so my linux server searches for a slash in > > > > > the full filename to get just the filename. but there is > > > > > none. so it assumes it is the filename and returns it all. > > > > > > > > > > > > > > > > > > > > > > > > > > > On 5/5/05, Mihael Knezevic wrote: > > > > > > > > thanks to all the responses for my question. > > > > > > > > > > > > > > > > actually i didn't know that it was a browser "thing". i > > > > > > > thought it was > > > > > > > > an operating system thing. thanks for clearing this up. and > > > > > > > as this is > > > > > > > > a browser specific thing IMHO there should be just a > > > > > change in the > > > > > > > > docu where you should add the fact that the IE is not behav= ing > > > > > > > > like any other browser with the method getName. that would = be of > > > > > > > much help. > > > > > > > > > > > > > > > > and this is the kind of "feature" i don't like of MS softwa= re. > > > > > > > > > > > > > > > > Am Mittwoch, 4. Mai 2005 22:02 schrieb Frank W. Zammetti: > > > > > > > > > I know, I've run into this myself... But, it should > > > > > be a fairly > > > > > > > > > trivial exercise to write code to extract just the > > > > > filename (as > > > > > > > > > I believe you've done). This makes sense to me as an > > > > > additional > > > > > > > > > method. That way no existing code gets broken, but newer > > > > > > > code can > > > > > > > > > use the new method, which works as getName() probably sho= uld > > > > > > > > > have been working all along anyway (IMHO). > > > > > > > > > > > > > > > > > > Frank > > > > > > > > > > > > > > > > > > Dakota Jack wrote: > > > > > > > > > > The data difference is not in the code but in the > > > > > request data > > > > > > > > > > from the browser. IE puts in the full name and other > > > > > > > browsers put > > > > > > > > > > in just the name. Calling [file].getName() gives the > > > > > > > same result > > > > > > > > > > for all of them. I don't think there is a way to get a > > > > > > > full name > > > > > > > > > > from the browsers that send only the file name. > > > > > There is no > > > > > > > > > > reason, of course, to know the full name. > > > > > > > > > > > > > > > > > > > > On 5/4/05, Frank W. Zammetti wrot= e: > > > > > > > > > > > > > > > > > > > >>It seems to me a method to get JUST the filename makes > > > > > > > a lot of sense... > > > > > > > > > >>what has been the reason for not adding it IN ADDITION > > > > > > > to what's > > > > > > > > > >>there now? Unfortunately it would make more sense if > > > > > > > > > >>getName() returned just the name while there was anothe= r > > > > > > > > > >>method, maybe > > > > > > > > > >>getFullName() that returned what getName() returns now, > > > > > > > but that > > > > > > > > > >>breaks existing code potentially, so I can certainly > > > > > > > see why that > > > > > > > > > >>hasn't been done, but adding something like > > > > > getJustTheName() > > > > > > > > > >>or something (obviously there must be a better choice!) > > > > > > > makes sense to me. > > > > > > > > > >> > > > > > > > > > >>Frank > > > > > > > > > >> > > > > > > > > > >>Dakota Jack wrote: > > > > > > > > > >> > > > > > > > > > >>>That is an excellent point, Robert. I often forget > > > > > > > how horrible > > > > > > > > > >>>it must be to be immeshed in those programming worlds > > > > > > > where there > > > > > > > > > >>>is no recourse. Too often we shy away, I think, > > > > > at changing > > > > > > > > > >>>code, even with the Java distribution itself, license > > > > > > > issues notwithstanding. > > > > > > > > > >>> > > > > > > > > > >>>On 5/4/05, robert burrell donkin > > > > > > > > > >>> > > > > > > > > wrote: > > > > > > > > > >>> > > > > > > > > > >>> > > > > > > > > > >>>>On Wed, 2005-05-04 at 10:26 -0700, Dakota Jack wrote: > > > > > > > > > >>>> > > > > > > > > > >>>> > > > > > > > > > >>>>>Some people think this is a bug and some people > > > > > > > think that this > > > > > > > > > >>>>>is a feature. > > > > > > > > > >>>> > > > > > > > > > >>>> > > > > > > > > > >>>> > > > > > > > > > >>>>>That is not a problem, however. I just went in and > > > > > > > changed the > > > > > > > > > >>>>>commons upload code adding .getName() to the > > > > > file at this > > > > > > > > > >>>>>stage. The problem you are seeing is in > > > > > Internet Explorer, > > > > > > > > > >>>>>right? Firefox and Netscape return the file name > > > > > > > and Internet > > > > > > > > > >>>>>Explorer returns the full path. Anyway, you > > > > > either have to > > > > > > > > > >>>>>solve the problem in the commons upload code itself, > > > > > > > where it > > > > > > > > > >>>>>is easy to solve, or to go through some wasted > > > > > > > mechanisms after > > > > > > > > > >>>>>the fact. Everyone has to solve this problem > > > > > > > somewhere, so I > > > > > > > > > >>>>>definitely come down on the side of "bug" versus > > > > > "feature". > > > > > > > > > >>>> > > > > > > > > > >>>>the great thing about open source is that you are > > > > > free to do > > > > > > > > > >>>>exactly this :) > > > > > > > > > >>>> > > > > > > > > > >>>>- robert > > > > > > > > > > > > > > > > > > > > > > > > > -----------------------------------------------------------------= ---- > > > > > > To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache= .org > > > > > > For additional commands, e-mail: > > > > > commons-user-help@jakarta.apache.org > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > "You can lead a horse to water but you cannot make it float > > > > > on its back." > > > > > ~Dakota Jack~ > > > > > > > > > > -----------------------------------------------------------------= ---- > > > > > To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.o= rg > > > > > For additional commands, e-mail: commons-user-help@jakarta.apache= .org > > > > > > > > > > > > > > > > > > -------------------------------------------------------------------= -- > > > > To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org > > > > For additional commands, e-mail: commons-user-help@jakarta.apache.o= rg > > > > > > > > > > > > > > > > > -- > > > "You can lead a horse to water but you cannot make it float on its ba= ck." > > > ~Dakota Jack~ > > > > > > --------------------------------------------------------------------- > > > To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org > > > For additional commands, e-mail: commons-user-help@jakarta.apache.org > > > > > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org > > For additional commands, e-mail: commons-user-help@jakarta.apache.org > > > > >=20 > -- > "You can lead a horse to water but you cannot make it float on its back." > ~Dakota Jack~ >=20 --=20 "You can lead a horse to water but you cannot make it float on its back." ~Dakota Jack~ --------------------------------------------------------------------- To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org For additional commands, e-mail: commons-user-help@jakarta.apache.org