2 Stimmen

Wie kann ich den Namen der hochgeladenen Datei in einem Perl-CGI-Skript zuverlässig ermitteln?

Der Dateiname, der von einem Upload-Formular an ein Perl-CGI-Skript (unter Verwendung von CGI.pm) übergeben wird, hängt vom Client-Rechner ab und kann client-abhängige Pfad-Trennzeichen enthalten. Gibt es einen zuverlässigen Weg, den übergebenen Parameter zu analysieren, um den Dateinamen zu ermitteln (normalerweise die letzte Teilzeichenkette nach dem letzten Pfadseparator).

4voto

Nic Gibson Punkte 6866

Das Problem mit den Pfadtrennzeichen ist mir bisher nur aufgefallen, wenn der Client MSIE verwendet (was Windows-Pfade voraussetzt). Ich habe einen recht einfachen regulären Ausdruck verwendet, um das Problem zu lösen. Sie könnten den regulären Ausdruck jedoch erweitern (oder sogar aufteilen), um die gängigsten Pfadtrennzeichen zu behandeln - '/', '\' und gelegentlich ':'.

Alternativ sollten Sie in der Lage sein, den Dateisystemtyp aus der Zeichenkette des Benutzeragenten herauszufinden (vielleicht mit HTTP::DetectUserAgent o HTTP::BrowserDetect ). Da Sie die Funktion fileparse_set_fstype von File::BaseName vor dem Parsen der Datei aufrufen könnten.

Etwa so:

use File::Basename;
use HTTP::BrowserDetect;

# ... get the filename into $upload_file and agent into $user_agent_string.

my $browser = HTTP::BrowserDetect->new($user_agent_string);

my $ostype;

$ostype = 'MSWin32' if $browser->windows;
$ostype = 'Unix' if $browser->unix;
# There are more tests available.

fileparse_set_fstype($ostype);

my $filename = basename( $upload_file);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X