Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs
ASP German Homepage Homepage
 

Liste

.NET 2.0 (1)
.NET Allgemein (16)
.NET Fu (5)
ADO.NET (11)
Aprilscherz (3)
ASP Grundlagen (44)
ASP Tricks (83)
ASP.NET (44)
ASPIntranet.de (5)
C# (28)
Datenbank (44)
Dokumentation (4)
IIS 6.0 (1)
Komponenten (29)
Optimierung (10)
Server (21)
Sicherheit (34)
Tee Off (6)
VB.NET (6)
WAP (8)
Web Services (11)
XML (9)

RSS 2.0 - Die neuesten fünf Artikel auf AspHeute.com


 

Suchen





 

English Articles
Chinese Articles
Unsere Autoren
 
Link zu AspHeute
Impressum
Werben
Anfragen

Dateiupload mit ASP und WSC

Geschrieben von: Christian Holm
Kategorie: ASP Tricks

Sie möchten eine Dateiupload Komponente auf Ihrer Web Site bzw. in ein Web Form einbinden, wollen diese aber im Zusammenhang mit ASP verwenden. Zusätzlich lassen Sie Ihre Web Site bei einer anderen Firma hosten, und können daher keine Komponenten am Web Server selbst registrieren bzw. die Hostingfirma läßt die Registrierung von Komponenten nicht zu. Dieser Artikel zeigt Ihnen die Verwendung einer Windows Script Component (WSC), mit der Sie ohne die Komponente am Web Server registieren zu müssen Dateien auf den Web Server kopieren können.

In diesem Artikel erkläre ich Ihnen lediglich den Einsatz der Windows Script Component (WSC), welche Sie im Download finden. Damit meine ich, daß wir nicht die WSC in Ihre Bestandteile zerlegen und besprechen werden.

Wenn Sie Hintergrundinfos über die Programmierung der Komponente beziehen möchten, dann lesen Sie bitte die beiden Artikel A File-Uploading Windows Script Component von Andy Smith und Uploading with ASP and VBScript von Philippe Collignon. Beide Artikel sind in Englisch geschrieben.

Aus lizenzrechtlichen Gründen ist die Meta Builders FileUp WSC Komponente nicht im Download dieses Artikels enthalten. Nichtsdestotrotz können Sie diese Komponente aber unter Meta Builders FileUp WSC Komponente downloaden.

Ich präsentiere Ihnen zwei einfache Anwendungsbeispiele, die die wichtigsten Eigenschaften einer Upload Komponente repräsentieren. Dadurch, daß es eine WSC ist müssen Sie die Komponente nicht auf dem Web Server registieren um sie verwenden zu können. Sie müssen nur die MetaBuilders.FileUp.wsc Datei einfach in ein Unterverzeichnis am Web Server kopieren und Sie können schon mithilfe einer ASP Datei auf die Komponente zugreifen.

Wichtig bei der Verwendung der WSC Datei ist, daß diese im selben Unterverzeichnis am Web Server liegt wie die ASP Dateien, die die Komponente verwenden.

Dies wollen wir nun auch tun. Wie schon erwähnt, habe ich zwei sehr einfache Beispiele vorbereitet. Beide verwenden Windows Forms als User-Interface und kommen mit ein paar Codezeilen aus. Sehen wir uns nun einmal die erste Variante an (Save.asp):

...
Dim MBRequest
Dim strPath, txtSvrPath , txtFileName
strPath = "script:" & Server.MapPath("MetaBuilders.FileUp.wsc" )

set MBRequest = GetObject( strPath )

If MBRequest("submit") = "Upload" Then
	Response.Write "<i>Datei:</i> " & MBRequest("File").Path & _
        MBRequest("File").FileName & "<br>"
	Response.Write "<i>Dateierweiterung:</i> " & _
        MBRequest("File").Extension & "<br>"
	Response.Write "<i>Der MIME/ContentType ist:</i> " & _ 
        MBRequest("File").ContentType & "<br>"
    Response.Write "<i>Speicherpfad:</i> <b>" &
        MBRequest("txtSvrPath").Value & "</b>"
   
'Speichern der Datei
  
    MBRequest("File").SavePath = MBRequest("txtSvrPath").Value
    
    MBRequest("File").Save

Else
	%>
...

Nach der Deklaration der Variablen und dem Einbinden der Komponente, verwenden wir eine If-Verzweigung um die zwei möglichen Zustände zu trennen. Der von der If-Verzweigung zu evaluierende Austruck stellt fest ob der "Upload"-Button schon angeklickt wurde.

Wird True zurückgegeben, wird der obige Abschnitt ausgeführt, der hier die Informationen über die kopierte Datei, sowie den Pfad des Zielortes angibt. Danach erfolgt der eigentliche Speichervorgang. Zuerst wird aus der HTML Control txtSvrPath der Speicherpfad ermittelt und danach mit

MBRequest("File").Save

die Datei am Server gespeichert. Der nachfolgende Sourcecode-Abschnitt zeigt das Form Objekt mit den HTML Control Eingabefeldern.

...
<form method="post" action="<%=Request.ServerVariables("url")%>" 
  enctype="multipart/form-data" >
    <table border="0" cellpadding="2" cellspacing="2">
        <tr>
            <td>Datei:</td>
            <td><input type="file" name="File"></td>
        </tr>
        <tr>
            <td>Server Pfad: </td>
            <td><input type="text" name="txtSvrPath"></td>
        </tr>
        <tr>
            <td colspan="2" align="right">
            <input type="submit" name="submit" value="Upload"></td>
        </tr>
    </table>
</form>
...

Das "Form" Element (<form ... >) wird dazu gebraucht eine Dateneingabe zu ermöglichen. Der Eintrag enctype="multipart/form-data" bestimmt die dabei verwendete Medienart. Um die einzelnen Controls leichter strukturieren zu können, habe ich sie in einen HTML-Table eingefaßt. Dieser Teil des Sourcecodes ist der Alternativteil der If-Verzweigung. Dieser wird ausgeführt, wenn der zu evaluierende Ausdruck der Verzweigung False zurück gibt. Dies ist hier dann der Fall, wenn der Upload-Button noch nicht betätigt wurde.

Abschließend (siehe folgenden Sourcecode-Abschnitt) schließen wir die If-Verzweigung und zerstören das MBRequest Objekt indem wir es mit dem Keyword Nothing gleichsetzen. Damit geben wir nicht mehr benötigten Speicher wieder frei.

...
<%
End If
set MBRequest = Nothing
%>

Wenn wir nun die ASP-Datei in einem Browser öffen, sieht dies so wie im folgenden Screenshot aus:

Zuerst geben wir die Datei an, die auf den Web Server kopiert werden soll. Dies geschieht, wenn wir auf Browse klicken, wie gewohnt eine Datei durch Anklicken auswählen und mit Open bzw. Öffnen die Auswahl bestätigen. Aus Sicherheitsgründen haben wir keinen direkten Zugriff auf die ausgewählte Datei und können auch nur eine auswählen.

Um die Datei auf den Web Server zu kopieren, klicken wir auf den Upload-Button. Nach dem Kopiervorgang erhalten wir dann folgende Informationen über die kopierte Datei und den Speicherpfad:

Im zweiten Beispiel bereichern wir die Funktionalität der Komponente um die Möglichkeit der zu kopierenden Datei am Web Server einen neuen Namen zu geben. Die dazu benötigten Codezeilen sind schnell hinzugefügt (SaveAsWithNewName.asp):

...
'Speichern der Datei

MBRequest("File").SavePath = MBRequest("txtSvrPath").Value
 
MBRequest("File").SaveAs( MBRequest("txtFileName").Value & "." & _ 
   MBRequest("File").Extension )
...

Wie das Kommentar schon sagt, wird zuerst wieder aus der HTML Control mit dem Namen txtSvrPath der vom Client eingegebene Pfad am Server ausgelesen. Danach wollen wir nun die Datei unter einem anderen Namen speichern. Dies geschieht mit der SaveAs-Methode. Wir übergeben der Methode den neuen Dateinamen aus der HTML Control txtFileName. Da es in den meisten Fällen nicht besonders sinnvoll ist die Dateierweiterung zu verändern, übernehmen wir diese von der ursprünglichen Datei.

Schließlich müssen wir noch den Dateinamen von der Erweiterung wie gewohnt durch einen Punkt trennen. Dies geschieht indem wir einfach in dem String zwischen Dateinamen und Erweiterung den Eintrag (siehe Kursivdruck)

... 
MBRequest("File").SaveAs( MBRequest("txtFileName").Value & "." & _ 
   MBRequest("File").Extension )
...

einfügen. Der restliche Sourcecode wird einfach durch die benötigten HTML Controls erweitert. Dieser Sourcecodeabschnitt sieht wie folgt aus:

...
<form method="post" action="<%=Request.ServerVariables("url")%>"
        enctype="multipart/form-data" >
    <table border="0" cellpadding="2" cellspacing="2">
        <tr>
            <td>Datei:</td>
            <td><input type="file" name="File"></td>
        </tr>
        <tr>
            <td>Server Pfad: </td>
            <td><input type="text" name="txtSvrPath"></td>
        </tr>
        <tr>
            <td>Neuer Name: </td>
            <td><input type="text" name="txtFileName"></td>
        </tr>
        <tr>
            <td colspan="2" align="right">
            <input type="submit" name="submit" value="Upload"></td>
        </tr>
</table>
</form>
...

Bei der Ausführung in einem Browser erhält man wieder folgende Screenshots. Zuerst die Eingabe der benötigten Daten:

Nach dem Klicken auf den Upload-Button erhält man wiederum die Informationen über die kopierte Datei und den Pfad am Web Server, in welchen die Datei hineinkopiert wurde:

Schlußbemerkung

Die beiden gezeigten Beispiele erfüllen natürlich nur die Grundfunktionen. In der vorliegenden Ausführung lassen sich aber schon die Vorteile der Verwendung von Windows Script Components erkennen: Man muß den Web Server bei der Installation der Komponente nicht stoppen, da es sich ja nur um einen einfachen Kopiervorgang handelt. Somit ist natürlich auch keine Registration der Komponente am Web Server erforderlich. Weiters ist der Programmieraufwand um eine WS-Komponente in einer ASP-Datei einzubinden gering.

Download des Codes

Klicken Sie hier, um den Download zu starten.

Verwandte Artikel

Beliebige Anzahl von Dateien uploaden
Dateiupload mit ASP.NET
Dateiupload mit ASP.NET und VB.NET
Web-basiertes Dateimanagement mit dem ASP FileMan
Windows Script Components

Links zu anderen Sites

A File-Uploading Windows Script Component
Meta Builders FileUp WSC Komponente
Uploading with ASP and VBScript

Wenn Sie jetzt Fragen haben...

Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten.

Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.

 

Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.

Bewerten Sie diesen Artikel
 Sehr gut   Nicht genügend  
   1  2  3  4  5  
 

  
   Für Ausdruck optimierte Seite

©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.