2010-11-19 9 views
1

Ich verwendete Datei HTML-Eingabe anstelle von FileUpload Web Control. Frag nicht warum, aber ich muss es einfach!Erhalten vollständigen Dateipfad von Code hinter von Datei HTML-Eingabe

HTML:

<input type="file" id="image1" class="listUploadAdd" name="ImageAdd1" /> 

-Code hinter:

Dim ImageAdd1 As String = Request.Form("ImageAdd1").ToString() 

I von "C: /Orange.jpg" geblättert hochladen und das Ergebnis hinter in-Code ist nur das Bild Name "Orange.jpg" und nicht die vollständige "C: /Orange.jpg", die benötigt wird, um die Datei von einem lokalen Laufwerk zum Hochladen zu bekommen.

Was ist der beste Weg, um den vollständigen Bildpfad von Code zu erfassen, der auf den Server hochgeladen werden soll?

Vielen Dank.

Antwort

2

Können Sie dem Eingabeelement einen runat="server" hinzufügen? :) Dann ist es ziemlich einfach, die Datei auf dem Server

Request.Files("File1").SaveAs("c:\somedir\yourfile.txt") 

speichern Wenn Sie den ursprünglichen Dateinamen und den Pfad wollen, versuchen Sie dies:

Dim filename As string = Request.Files("File1").FileName 

die Datei herunterzuladen, ohne ein runat="server" Attribut zu verwenden, können Sie kann dies tun:

Dim file = Request.Files("File1") 
Dim buf(file.ContentLength) As Byte 
file.InputStream.Read(buf, 0, file.ContentLength) 
IO.File.WriteAllBytes("C:\somedir\yourfile.txt", buf) 

Aber Sie enctype auf dem Formular-Elemente in der hTML-Seite einstellen:

<form id="yourform" runat="server" enctype="multipart/form-data"> 
+0

Nicht sicher, was ich nicht richtig mache. Ich habe diesen Fehler "Objektverweis nicht auf eine Instanz eines Objekts festgelegt". Habe die gleiche Nachricht für "Dim filename As String = Request.Files (" image1 "). FileName" ODER "Dim Dateiname As String = Request.Files (" ImageAdd1 "). FileName". Ich habe dieselben Formularattribute wie du erwähnt. Seltsam wirklich. –

+0

Können Sie den vollständigen Quellcode posten? Sowohl .aspx und codebehind Datei .. –

+0

Aber wie @Michael Shimmins darauf hingewiesen, sollten Sie wirklich nicht besorgt sein, wo die Datei auf dem Client-Rechner befand. Was wichtig ist, ist, wo Sie es auf Ihrem Server gespeichert haben. –

1

ich geblättert von „C: /Orange.jpg“ hochladen und das Ergebnis in-Code ist hinter nur der Bildname „orange.jpg“ und nicht den vollen „C: /Orange.jpg“, das ist benötigt, um die Datei vom lokalen Laufwerk zum Hochladen zu bekommen.

Sie können die Datei nicht vom Client-Computer abrufen. Wenn Sie Ihr Programm entwickeln, handelt es sich bei dem Client und dem Server um den gleichen Computer. Bei der Bereitstellung werden der Server und der Client jedoch unterschiedliche Computer sein. Wenn der Code dahinter ausgeführt wird (auf dem Server), versuchen Sie C: \ Orange.jpg zu öffnen, wenn Sie versuchen, ihn von der Festplatte des Servers zu öffnen. Diese Datei wird wahrscheinlich nicht existieren.

Wenn Sie eine Datei von einer Webseite hochladen, wird sie als Teil der POST-Nachricht an den Server gesendet. Sie können die Datei aus der Formularsammlung herausholen. Sie müssen den Uploader nicht in das ASP.NET-Steuerelement konvertieren oder das Attribut runat="server" hinzufügen. Solange Sie das Formular posten, das das Eingabeelement enthält, wird es an den Server gesendet.

Der Inhalt der Datei wird als Byte-Array im Formular gespeichert. Sie können dieses Byte-Array als Datei auf der Festplatte des Servers speichern.

Zusammengefasst:

Sie brauchen nicht auf dem Client-Gerät den Pfad zur Datei kennen, da man es sowieso nicht zugreifen können.Verwenden Sie stattdessen die Dateidaten, die als Teil der Formularübermittlung gepostet werden, um eine Kopie der Datei auf dem Server zu speichern.