patnym has asked for the wisdom of the Perl Monks concerning the following question:

With the CGI.pm module you can get a web browser to open a dialog where you can select a file, e.g. for uploading. I'd like to be able to select a directory in a similar way, not for uploading but just to get the path of the directory into a variable in the script. Can it be done?

May you be well and happy

UPDATE: What I would like to achieve is that the client can choose a directory on her file system and then run a function of the script there. Is there some other way (besides the browser widget I mean) to achieve this?

-Patrik

Replies are listed 'Best First'.
Re: select directory with CGI.pm
by jettero (Monsignor) on Jan 17, 2008 at 11:50 UTC
    The upload file filesystem browser widget is a function of the OS, not the browser, isn't that odd? It gives the browser a way to upload the file, but afaik, it does not mention the path in the POST. So, I think the answer is going to be no: there's no way to let the user browse their file system from your CGI and POST a directory -- without some kind of magic (ie, non CGI.pm) hackery anyway.

    UPDATE: "widget is a function of the OS, not the browser" / "No, it's not. It is completely application dependent." Well, the applications I mean are firefox and IE, which load the OS widget, which is why css doesn't work on the file upload buttons. "path in the POST" / "some user agents" So? It's not really something you can depend on then, is it? I think that's not only application dependent, but OS dependent.

    -Paul

      The upload file filesystem browser widget is a function of the OS, not the browser

      No, it's not. It is completely application dependent.

      it does not mention the path in the POST

      Some user agents do.

Re: select directory with CGI.pm
by igelkott (Priest) on Jan 17, 2008 at 23:04 UTC
    As stated by others (and the documentation), the path is not dependably returned by the user's browser. So, if you're really lucky, you might be able to find this in $filename = param('uploaded_file');. Of course, this assumes that the user actually uploads a file. Probably not what you want but it is a faint possibility.

    What I've done to get around a similar problem is to have (intranet) users start the process with a local program (VBS in my case) which gets the required info from the local system and opens an internal webpage with the appropriate parameters to do the work.