2009-03-06 8 views
0

Das FileUpload-Steuerelement erfordert, dass ich in der SaveAs() -Methode ein gerootetes Verzeichnis zur Verfügung stelle. Ich würde jedoch sehr viel lieber die hochgeladenen Dateien in ein virtuelles Verzeichnis wie "~/UserFiles/[Benutzername]/[Dateiname]" gehen. Gibt es eine Möglichkeit für mich, das zu erreichen?FileUpads und gerootete Verzeichnisse

+0

bewusst sein, was Sie tun, wenn ein Upload direkt in einen Ordner geht, die von Ihrem Web-Server zugegriffen werden kann. Scheint so, als ob du eine schwere Schwachstelle öffnest. –

Antwort

4

die Seiten MapPath Methode: -

ctl.SaveAs(MapPath("~/UserFiles/[username]/[filename]")); 
+0

Danke. Alles ergibt jetzt Sinn. –

+0

ummm. . . Gibt es eine Möglichkeit für mich, "~/userdata/[Benutzername]" zu erstellen, wenn es nicht bereits existiert? –

+0

System.IO.Directory.CreateDirectory (MapPath ("~/userdata/[Benutzername]")); – AnthonyWJones

0

Nein, das Schlüsselwort ist erforderlich. Sie können Ihr Skript verwenden, um die Datei nach dem Download zu kopieren. Verwenden Sie

+0

Hmmm. Weißt du, was das Grundprinzip ist, ein verwurzeltes Verzeichnis für dieses Steuerelement zu benötigen? Es scheint mir verrückt zu sein. –

+0

Der rationale ist, dass es ein physischer Dateipfad ist, da Sie in das Dateisystem speichern. Pfade in URLs sind logische Pfade, die nicht physisch sind. Sehr wahrscheinlich werden viele Anwendungen die Datei außerhalb der Ordner speichern, die die Website darstellen. – AnthonyWJones

+0

Ja. Aber in meinem Fall haben die Benutzer keine Kontrolle darüber, wo die Datei gespeichert wird. Nur mein Programm tut es. –

0

Manchmal ist der MapPath nicht direkt zugänglich.

In diesem Fall verwenden

ctl.SaveAs(Server.MapPath("~/UserFiles/[username]/[filename]")); 
+0

gibt es eine Möglichkeit für mich, "~/userdata/[Benutzername]" zu erstellen, wenn es nicht bereits existiert? –

Verwandte Themen