ASP Upload Beispiel
Beispiel zum hochladen von Dateien

In diesem Beispiel kann der Benutzer mittels eines Formulares eine Datei auf seinem Computer auswählen und auf den Webserver hochladen. Beim Absenden wird das Script "upload.asp" aufgerufen und alle Formulardaten übergeben. Das Script überprüft die eingegebenen Daten und zeigt entweder eine Webseite mit Fehlermeldungen oder eine Webseite mit einer Erfolgsmeldung an.

Mit diesem Script können nur Dateien mit einer maximalen Grösse von 2 Megabytes übertragen werden. Jede Datei die grösser ist, wird nicht hochgeladen. Das Verzeichnis in welches sie die Datei hochladen wollen muss ausserdem Schreibrechte besitzen.

Das Formular
<html>
<head>
 <title>ASP Upload Beispiel</title>
</head>

<body>

<form method="POST" action="upload.asp" enctype="multipart/form-data" target="_new">
 <input type="file" name="File" size="50"><br>
 <input type="submit" value="Hochladen" name="Submit">
</form>

</body>
</html>	 
		 

Das Script

<html>
<head>
        <title>ASP Upload Beispiel</title>
</head>
<body bgcolor="white">
<%=Font%>
<%
' --- Fehlerbehandlung aktivieren
' --- On Error Resume Next
' --- Zuweisen der Fehlerquelle, die bei einem Fehler ausgegeben werden soll
        Err.Source = "GetFILE HTTP-Upload"
' --- Konstante für Fehlerüberschrift
Const ErrHeader = "<b>Fehler</b><br><br>"

' --- Array deklarieren
Dim ErrArray(4)
        ErrArray(0) = "10900 - Ihre gesendete Datei ist zu gross."
        ErrArray(1) = "10901 - Unbekannter Fehler.<br>"
        ErrArray(2) = "10902 - Es wurde keine Datei gesendet oder die Übertragung ist fehlerhaft.<br>"

' -- Aufrufen der Subroutine GetFILE
        Call GetFILE()


Private Sub GetFile()

' --- In dieser Subroutine wird der HTTP-Stream ausgelesen


' --- Deklarieren der Variablen
Dim FileText
    FileText = Request.BinaryRead(Request.TotalBytes)
Dim FileTextByte
    FileTextByte = ""
Dim FileTextNew
    FileTextNew = ""
Dim FilePosFirst
    FilePosFirst = 0
Dim FilePosLast
    FilePosLast = 0
Dim FileType
    FileType = ""
Dim strRevText
    strRevText = ""
Dim strFileName
    strFileName = ""
Dim strFileNameOnly
    strFileName = ""
Dim search
    search      = 0
Dim string  
    string      = ""
Dim posFileName
    posFileName = 0
Dim rghFile
    rghFileName = ""
Dim lenFileTextByte
    lenFileTextByte = 0

' --- Angeben der max. Dateigrösse + ca. 500 Byte für Dateiinformationen
Dim maxLength
    maxLength = 25500

' --- Abfrage der Grösse des gesendeten Streams
        If Request.TotalBytes > maxLength Then
                Call Error_Handler(10900)
                Exit Sub
        End if

' --- Suchen nach HexCode 0D 0A 0D 0A (Dateianfang innerhalb des HTTP-Streams)
        FilePosFirst = InStrB(FileText, (ChrB(13) & ChrB(10) & ChrB(13) & ChrB(10)))

' --- Suchen nach HexCode 0D 0A 2D 2D (Dateiende innerhalb des HTTP-Streams)
        FilePosLast = InStrB(FileText, (ChrB(13) & ChrB(10) & ChrB(45) & ChrB(45)))

' --- Suchen nach HexCode 2D 0A 0D innerhalb des umgedrehten HTTP-Streams, da unter
' --- Umständen mehrere Dateiendekennzeichen vorhanden sind.
        strRevText = StrReverse(FileText)
        FilePosLast = InStrB(strRevText, (ChrB(45) & ChrB(10)) & ChrB(13))
        FilePosLast = LenB(FileText) - FilePosLast

' --- Abbruch bei Dateigrösse 0 Byte
        If FilePosFirst = 0 Or FilePosLast = 0 Or FilePosLast - FilePosFirst < 5 Then
                Call Error_Handler(10902)
                Exit Sub
        End If
             

' --- Abbruch, wenn ein Fehler aufgetrten ist
        If Err <> 0 Then
                Call Error_Handler(10901)
                Exit Sub
        End if

' --- Schreiben des Dateiinhalts in ByteArray
        FileTextByte = MidB(FileText, (FilePosFirst + 4), (FilePosLast - (FilePosFirst + 4)))

' --- Ermittlung der Dateigrösse durch Auslesen der Länge des ermittelten Dateiinhalts
        lenFileTextByte = LenB(FileTextByte)

' --- Konvertierung des Dateiinhalts (Binärstream) in Ascii-Zeichen
        For i = 1 To lenFileTextByte
                FileTextNew = FileTextNew & Chr(AscB(MidB(FileTextByte, i, 1)))
        Next

' --- Ermittlung des Dateinamens inkl. Pfad innerhalb des HTTP-Streams
string = ChrB(102)&ChrB(105)&ChrB(108)&ChrB(101)&ChrB(110)&ChrB(97)&ChrB(109)&ChrB(101)&ChrB(61)&ChrB(34)
search=InStrB(FileText,string)
	posFileName=search+9
        rghFileText = RightB(FileText, LenB(FileText) - posFileName)
        strFileName = LeftB(rghFileText, InStrB(rghFileText, ChrB(34)) - 1)
		
' --- Schreiben des ermittelten Dateiinhalts in eine Datei.
        Set objFileSys = Server.CreateObject("Scripting.FileSystemObject")
Set File=objFileSys.CreateTextFile(Server.MapPath("./")&"\"&BinaryToString(strFileName),True,False)
                        File.WriteLine CStr(FileTextNew)
                        File.Close
                Set File = Nothing
        Set objFileSys = Nothing

' --- Ausgeben der Dateigrösse in Bytes
        Response.Write "<strong>Dateigröße: </strong>" & lenFileTextByte & " Byte.<br><br>"

	Response.Write "Datei erfolgreich hochgeladen"
End Sub

' --- Wandelt den Dateinamen in ein verträgliches Format um
Function BinaryToString(Binary)
  Dim I, S
  For I = 1 To LenB(Binary)
    S = S & Chr(AscB(MidB(Binary, I, 1)))
  Next
  BinaryToString = S
End Function


Private Sub Error_Handler(intErrNumber)
' --- Ermitteln des übergebenen Fehlercodes und Ausgabe am Bildschirm
        Select Case intErrNumber
                Case 10900: Response.Write ErrHeader & ErrArray(0)
                Case 10901: Response.Write ErrHeader & ErrArray(1)
                Case 10902: Response.Write ErrHeader & ErrArray(2)
                Case Else: Response.Write ErrHeader & Err.Description
        End Select
        Exit Sub
End Sub
%>
</body>
</html>