<Form action=upload.asp method=post enctype=multipart/form-data>
Datei hochladen:<Eingabetyp=Dateiname=Datei1><br>
<Eingabetyp=Submit-Name=Upload-Wert=Upload>
</form>
Unter anderem wird der Parameter enctype verwendet, um die MIME-Codierungsmethode des Formulars festzulegen. Beim Hochladen einer Datei (oder wenn sie gleichzeitig ein Textfeld enthält) muss ihr Attribut auf multipart/form-data gesetzt werden Die serverseitige Binärdatei wird später in diesem Artikel vorgestellt.
2. Dateiformatanalyse hochladen
Bevor wir die Datei verarbeiten, müssen wir zunächst das spezifische Format der hochgeladenen Datei verstehen. Wir können ihren Binärcode anzeigen, indem wir das folgende einfache ASP-Programm schreiben:
<%
filesize=Request.TotalBytes 'Ermitteln Sie die Größe der hochgeladenen Datei
filedata=Request.BinaryRead(filesize) 'Holen Sie sich die Binärdaten der hochgeladenen Datei
Response.BinaryWrite filedata 'Binärdaten im Browser anzeigen
%>
Bei der Analyse des im Browser angezeigten Binärcodes der hochgeladenen Datei haben wir festgestellt, dass der Code aus vier Teilen besteht (wenn mehrere Dateien oder Textfelder gleichzeitig hochgeladen werden, sind die Codes in der Reihenfolge des Hochladens im gleichen Format angeordnet ), und der Inhalt jedes Teils wird mit einem Wagenrücklauf eingegeben. Getrennt durch Zeilenumbrüche:
1) Der erste Teil (Startflagge)
--------------------------7d329631b04d4
2) Teil 2 (Dokumentbeschreibung)
Inhaltsdisposition: form-data; name=file1; filename=C:/Documents and Settings/Administrator/My Documents/Invitation.doc Content-Type: application/msword
Hier können wir den Dateinamen und den absoluten Pfad der hochgeladenen Datei sowie den Dateityp abrufen. Diese Informationen sind wichtig, um die Datei korrekt zu speichern.
3) Teil 3 (Dokumentinhalte)
Das heißt, der binäre Inhalt der Datei wird weggelassen.
4) Teil 4 (Endmarke)
--------------------------7d329631b04d4
Kombination der Inhalte des ersten und vierten Teils: --------------7d329631b04d4 (Der Wert ist bei jedem Hochladen unterschiedlich ) Dasselbe) fungiert als Trennzeichen, das den Anfang und das Ende eines Datenelements markiert (wenn mehrere Inhalte hochgeladen werden). In Bezug auf die zum Speichern der Datei erforderlichen Informationen müssen wir zunächst den Dateinamen aus dem Dateinamen des zweiten Teils der Daten ermitteln, dann die Startposition der Datei korrekt lokalisieren und schließlich die ASP-Technologie zum Speichern verwenden die Binärdatei mit ihrem ursprünglichen Dateinamen. Wenn mehrere Inhalte (z. B. mehrere Textfelder und Dateien) gleichzeitig hochgeladen werden, werden sie auf die gleiche Weise verarbeitet. Jeder Teil des Inhalts ist im Trennzeichen enthalten, die Textfelder und Dateien werden jedoch auf leicht unterschiedliche Weise ausgedrückt Dies kann durch gezielte Analyse des Binärcodes erfolgen.
3. Verwenden Sie die ASP-Technologie, um die Dateispeicherung zu implementieren
Verarbeitung des hochgeladenen Dateicodes
1) Holen Sie sich den Trenncode
Aus der obigen Analyse wissen wir bereits, dass Trennzeichen eine wichtige Rolle bei der Trennung mehrerer Datensegmente (einschließlich Textfeldern und verschiedener Dateitypen) spielen. Wie bereits analysiert, erscheint das Trennzeichen vor dem ersten Wagenrücklauf- und Zeilenvorschubsymbol. Daher kann der Trenncode über das folgende Programm abgerufen werden:
<%
newline=chrB(13) & chrB(10) 'newline stellt das binäre Wagenrücklaufzeichen dar
filesize=Request.TotalBytes 'filesize ist die Größe der hochgeladenen Datei
filedata=Request.BinaryRead(filesize) 'filedata sind die Binärdaten der hochgeladenen Datei
Divider=leftB(filedata,clng(instrb(filedata,newline))-1) 'divider ist der Teiler
%>
Hinweis: Da es sich hier um binären Bytecode handelt, verwenden alle Funktionen dessen Binärversion mit dem Zusatz b.
2) Holen Sie sich den Inhalt der Datei (oder des Textfelds).
(1) Vorbereitungsfunktion (Binärzeichenfolge in Zeichenfolge umwandeln)
Der Inhalt der hochgeladenen Datei muss nicht den Konvertierungsprozess von Binär in String durchlaufen und kann direkt gespeichert werden. Wenn Sie jedoch den Inhalt des Textfelds oder den Namen der Datei extrahieren müssen, müssen Sie eine Konvertierung durchführen. Daher ist es notwendig, eine universelle Konvertierungsfunktion zu schreiben, die für chinesische Schriftzeichen geeignet ist. Das Folgende ist der Funktionscode:
Funktion BtoS (bstr)
Wenn nicht, ist es Null (bstr), dann
für i = 0 bis lenb(bstr) - 1
bchr = midb(bstr,i+1,1)
If ascb(bchr)>127 Then 'Chinesische Zeichen sind Doppelbytes, daher müssen zwei Zeichen zusammen verarbeitet werden
temp = temp&chr(ascw(midb(bstr, i+2, 1)&bchr))
ich = ich+1
Anders
temp = temp&chr(ascb(bchr))
Ende wenn
nächste
Ende wenn
BtoS=temp
Funktion beenden
(2) Holen Sie sich den Inhalt der Datei (oder des Textfelds)
In tatsächlichen WEB-Anwendungen kann der Upload-Vorgang mehrere Inhalte umfassen, z. B. mehrere Textfelder, mehrere Dateien usw. Dateien und Textfelder sind leicht zu unterscheiden. Die Dateidaten enthalten die Zeichenfolge filename=. Daher haben wir die folgende allgemeine Funktion geschrieben, mit der sowohl Dateiinhalte als auch Textfeldinhalte extrahiert werden können (eine binäre Konvertierung ist erforderlich):
Funktion getdata(byval data, byval divider, final) 'data stellt die Binärzeichenfolge dar; final stellt die Endposition der Daten dar
filename=chrb(102)&chrb(105)&chrb(108)&chrb(101)&chrb(110)&chrb(97)&chrb(109)&chrb(101)&chrb(61)&chrb(34) 'Binäre Darstellung der Zeichenfolge filename=
bncrlf=chrb(13)&chrb(10) 'Binäres Wagenrücklaufzeichen
startpos = instrb(data,divider)+lenb(divider)+lenb(bncrlf) 'Startposition
endpos = instrb(startpos,data, Divider)-lenb(bncrlf) 'Endposition
part1 = midb(data, startpos, endpos-startpos) 'Inhalt zwischen zwei Trennzeichen
firstline = midb(part1, 1, instrb(part1, bncrlf)-1) ' Beschreibungsabsatz vor dem Inhalt
If (instrb(firstline,filename)=0) Then 'Wenn es sich um ein Textfeld handelt, rufen Sie den Inhalt der Textfeldzeichenfolge ab
stemp=midb(part1,instrb(part1,bncrlf&bncrlf)+lenb(bncrlf&bncrlf),lenb(part1)-instrb(part1,bncrlf&bncrlf)+lenb(bncrlf&bncrlf))
getdata=BtoS(stem)
Else 'Wenn es sich um eine Datei handelt, holen Sie sich den binären Inhalt der Datei
Getdata=midb (part1, instrb (part1, bncrlf&bncrlf)+lenb (bncrlf&bncrlf), lenb (part1)
-instrb(part1,bncrlf&bncrlf)+lenb(bncrlf&bncrlf))
Ende wenn
Final=Endpos
Funktion beenden
Sie können den erforderlichen Inhalt der Datei (oder des Textfelds) erhalten, indem Sie diese Funktion direkt im Programm aufrufen, wie unten gezeigt:
<%
Content=getdata (Daten, Teiler, Position)
%>
3) Ermitteln Sie den Dateinamen
Wie bereits zuvor analysiert, enthält das Feld „filename=“ des Datenstroms der Upload-Datei den Namen und den absoluten Pfad der Datei. Im Allgemeinen müssen wir nur den Dateinamen im Pfad extrahieren. Das Folgende ist der Programmcode:
<%
namepos=instrrev(B2S(firstline),chr(92)) 'firstline sind die oben erhaltenen Beschreibungsteildaten, chr(92)
äußern/
filename=midb(firstline,namepos+1,lenb(firstline)-namepos-1) 'Den Dateinamen abrufen
%>
Verwenden Sie ASP, um die Funktion zum Hochladen von Dateien direkt zu implementieren
Herkömmliche ASP-Programmierer können das FILESYSTEMOBJECT-Objekt nur zum Verschieben, Kopieren, Löschen und für andere Vorgänge an Textdateien (.txt) verwenden. Wenn sie Binärobjekte verarbeiten müssen, müssen sie die zuvor in diesem Artikel vorgestellten Methoden verwenden. Jetzt kann das ADO.STREAM-Objekt in ASP jedoch gleichzeitig Textobjekte und Binärobjekte bedienen (kann unter http://www.microsoft.com/data heruntergeladen werden) und Sie können es verwenden, um den Datei-Upload direkt zu implementieren Funktion in ASP. Im Folgenden stellen wir den Implementierungsprozess vor.
1) Öffnen Sie das STREAM-Objekt
Wenn Sie bei SREAM-Objekten die Datei speichern möchten, müssen Sie den gesamten Inhalt des Objekts speichern. Daher müssen wir zwei (oder mehr) STREAM-Objekte erstellen, von denen eines der Quelldatenstrom ist, der die anfänglichen Binärdaten empfängt, und das andere der Zieldatenstrom ist, der die verarbeiteten Daten vom Quelldatenstrom empfängt in der gewünschten Datei speichern.
<%
set str=server.CreateObject(ADODB.Stream) 'str ist der Quelldatenstrom
str.Mode=3 'Stellen Sie den Öffnungsmodus ein, 3 ist lesbar und beschreibbar
str.Type=1 'Legen Sie den Datentyp fest, 1 sind Binärdaten
str.Öffnen
set desc=server.CreateObject(ADODB.Stream) 'desc ist der Zieldatenstrom
desc.Mode=3
Desc.Type=1
desc.Öffnen
%>
2) Kopieren von Inhalten zwischen STEAM-Objekten
In diesem Teil müssen Sie den Anfang der Datei im Quelldatenstrom finden und die Länge des Dateiinhalts ermitteln, bevor Sie die Datei korrekt in den Zieldatenstrom kopieren und speichern können. Der Programmcode lautet wie folgt:
<%
formdata=Request.BinaryRead(Request.TotalBytes) 'Formulardaten sind alle hochgeladenen Inhalte
str.Write formdata ' Zuweisungsquelldatenstrom
str.position=count-lenb(result)-2 'Position zeigt auf den Anfang der Datei
str.copyto desc, lenb(filecotent) 'lenb(filecontent) stellt die Länge der Datei dar
desc.SaveToFile fullpath,2 'Speichern Sie die Datei unter dem durch fullpath angegebenen Pfad und Namen
%>
3) Schließen Sie das STEAM-Objekt
Sobald die Programmierung abgeschlossen ist, sollte das STEAM-Objekt wie folgt geschlossen und freigegeben werden:
<%
Beschr. Schließen
Setze desc=nothing
Str. schließen
Setzen Sie STR=nichts
%>
Zusammenfassen
In diesem Artikel wird eine Methode zum direkten Implementieren des Datei-Uploads mithilfe von ASP beschrieben, die in dem von dieser Einheit entwickelten Informationsmanagementsystem gut angewendet wurde. Die Praxis hat gezeigt, dass diese Methode einfacher und effizienter ist als mehrere herkömmliche Methoden zum Hochladen von Dateien.