2009-03-10 11 views
0

hochgeladen wurde habe ich ein Fileupload-Steuerelement (FileUpload1) auf meinem Web-Formular sowie eine „sumbit“ Knopf, ein Etikett, und ein verstecktes Feld, das eine Benutzer-ID enthält. Ich habe den folgenden Code in dem Click-Ereignis der Schaltfläche:Fileupload - Prüfen, ob eine tatsächliche Datei

string path = Server.MapPath("~/userfiles/"); 

if (FileUpload.HasFile) 
{ 
    try 
    { 
     FileUpload1.SaveAs(path + UserID.Value + "/image.jpg"); 
    } 
    catch 
    { 
     Label1.Text = "* unable to upload file"; 
     Label1.Visible = true; 
    } 
} 

Es funktioniert großartig, wenn ich eine tatsächliche Datei hochladen. Wenn ich jedoch einen nicht vorhandenen Dateinamen (z. B. "c: \ a.jpg", der auf meinem Computer nicht existiert) in das Textfeld von FileUpload eingeben und auf die Schaltfläche "Summe" klicken, gibt HasFile immer noch "true" zurück. Darüber hinaus löst SaveAs() keine Ausnahmen aus, und es ist eine void-Funktion, die keinen Wert zurückgibt, der auf Erfolg oder Fehlschlag hinweist. Wie kann ich feststellen, ob eine Datei tatsächlich hochgeladen wurde?

Antwort

7

Überprüfen Sie, ob es existiert.

if(File.Exists(myFile)){ 
    //it was uploaded. 
} 
2

Sie können überprüfen, ob die Datei mit File.Exists vorhanden ist, bevor Sie SaveAs aufrufen.

3

Sie könnten FileUpload.PostedFile.ContentLength überprüfen Eigenschaft

1

Hmmm ....

nicht sicher, ob ich verstehen. Zunächst wird FileUpload.HasFile in Ihrem Code nicht kompiliert. Sollte FileUpload1.HasFile sein.

Wenn ich dies zu korrigieren, und den Code ausführen, diese Zeile gibt false zurück, wenn die Datei nicht existiert ...

Sie können prüfen, ob Datei existiert nach File.Exists (Pfad) mit dem Hochladen; Das Dateiobjekt ist Teil von System.IO.

1

Diese nicht über Ihre eigentliche Frage ist, aber Sie sollten alle Eingaben prüfen, vor allem, wenn Benutzer Dateien in einem virtuellen Ordner auf Ihrem Webserver hochladen möchten. Sie sollten zumindest überprüfen, ob der Inhaltstyp der Datei der erwartete ist, oder - noch besser, das Bild mit den im .NET-Framework verfügbaren Klassen filtern (skalieren).

Wenn Sie nicht tun, so können Benutzer beliebige Inhalte über Ihre Website teilen oder schädliche Dateien (zum Beispiel Bilder mit Skript, die von bestimmten Web-Browsern ausgeführt könnte) platzieren auf dem Server.

Mit der zusätzlichen Validierung können Sie auch überprüfen, ob tatsächlich Inhalte gesendet wurden.

UND: Eine sehr schwere Sicherheitslücke öffnet sich, wenn Sie den Speicherpfad durch Verketten von Eingaben aus einem Formularfeld erstellen (ich nehme an, UserID.Value ist der POST-Parameter, den Sie erwähnen?). Auf diese Weise können Benutzer entscheiden, wo der Inhalt auf Ihrem Server gespeichert werden soll und, noch schlimmer, vorhandene Dateien überschreiben können !!!

Verwandte Themen