Zusammenfassung: In einer browser-/serverbasierten Anwendungsumgebung war das Hochladen verschiedener Dateitypen im Browser schon immer eines der Probleme, die die Dateiverwaltungsanwendungen der Benutzer plagen. Es gibt drei Mechanismen zum Hochladen von Dateien in HTTP: RFC1867, PUT und WebDAV. Eine gängige Implementierungsmethode ist die Verwendung eines neuen Typs, der in RFC1867 eingeführt wurde: Datei- und ADO-Stream-Objekte. In diesem Artikel werden die oben genannten Upload-Methoden und Implementierungsprinzipien erläutert und spezifische Lösungsbeispiele aufgeführt.
Schlüsselwörter: ASP-Komponente FILE-Objekt
Derzeit sind Anwendungen, die auf dem Browser/Server-Modell basieren, beliebter. Wenn Benutzer Dateien auf den Server übertragen müssen, besteht eine der gängigen Methoden darin, einen FTP-Server zu betreiben und das FTP-Standardverzeichnis jedes Benutzers als Web-Home-Verzeichnis des Benutzers festzulegen, damit der Benutzer das FTP-Client-Programm ausführen und Dateien auf den Server hochladen kann angegebenen Webverzeichnis. Dies erfordert, dass Benutzer wissen, wie das FTP-Client-Programm verwendet wird. Daher ist diese Lösung nur für erfahrene Benutzer machbar, die mit FTP vertraut sind. Wenn wir die Datei-Upload-Funktion in das Web integrieren können, sodass Benutzer die Upload-Aufgabe nur mit einem Webbrowser abschließen können, wird dies für sie sehr praktisch sein. Aufgrund der Einschränkung, dass das Dateisystemobjekt jedoch nur Textdateien übertragen kann, ist das Hochladen von Dateien das größte Problem von ASP. Im Folgenden wird beschrieben, wie Sie Dateien auf einer Webseite basierend auf dem HTTP-Protokoll hochladen.
eins. Drei Mechanismen zum Hochladen über HTTP
Es gibt drei Mechanismen zum Hochladen über HTTP: RFC1867, PUT und WebDAV.
PUT ist ein neues HTTP-Verb, das in HTTP 1.1 eingeführt wurde. Wenn der Webserver einen HTTP-PUT und den Objektnamen empfängt, authentifiziert er den Benutzer, empfängt den Inhalt des HTTP-Streams und speichert ihn direkt auf dem Webserver. Da dies für eine Website störend sein kann, geht auch der größte Vorteil von HTTP verloren: die Programmierbarkeit des Servers. Im Fall von PUT bearbeitet der Server die Anfrage selbst: Es gibt keinen Raum für das Eingreifen von CGI- oder ASP-Anwendungen. Die einzige Möglichkeit für Ihre Anwendung, PUTs zu erfassen, besteht darin, auf einer niedrigen Ebene, der ISAPI-Filterebene, zu arbeiten. Aus entsprechenden Gründen ist die Anwendung von PUT sehr begrenzt.
WebDAV ermöglicht die verteilte Authentifizierung und Übersetzung von Webinhalten. Es werden mehrere neue HTTP-Verben eingeführt, die das Hochladen, Sperren/Entsperren und Einchecken/Einchecken von Webinhalten über HTTP ermöglichen. „Im Web speichern“ wird in Office 2000 über WebDAV implementiert. Wenn Sie nur daran interessiert sind, Inhalte hochzuladen, funktioniert WebDAV hervorragend und löst viele Probleme. Wenn Sie jedoch Dateien innerhalb Ihrer Webanwendung hochladen müssen, ist WebDAV für Sie nutzlos. Wie HTTP PUT werden diese WebDAV-Verben vom Server interpretiert, nicht von der Webanwendung. Sie müssen auf der ISAPI-Filterebene arbeiten, um auf diese Verben von WebDAV zuzugreifen und den Inhalt in Ihrer Anwendung zu interpretieren.
RFC1867 ( http://www.ietf.org/rfc/rfc1867.txt ) wurde als vorgeschlagener Standard verwendet, bevor er schließlich vom W3C in HTML3.2 akzeptiert wurde. Es ist eine sehr einfache, aber wirkungsvolle Idee: Definieren Sie einen neuen Typ in einem Formularfeld.
<INPUT TYPE="FILE">
Und dem Formular selbst verschiedene Codierungsschemata hinzugefügt, anstatt das typische zu verwenden:
<FORM ACTION="formproc.asp" METHOD="POST">
, sondern:
<FORM ACTION="formproc .asp". " METHOD="POST" ENCTYPE="multipart/form-data">
Dieses Kodierungsschema ist bei der Übertragung großer Datenmengen effizienter als das standardmäßige Formularkodierungsschema „application/x-url-encoded“. Viel höher. Die URL-Kodierung verfügt nur über einen sehr begrenzten Zeichensatz. Alle Zeichen, die den Zeichensatz überschreiten, müssen durch „%nn“ ersetzt werden, wobei nn die entsprechenden zwei Hexadezimalziffern darstellt. Beispielsweise sollten auch gewöhnliche Leerzeichen durch „%20“ ersetzt werden. RFC1867 hingegen verwendet eine mehrteilige MIME-Kodierung, wie sie häufig in E-Mail-Nachrichten verwendet wird, um große Datenmengen ohne Kodierung zu übertragen, jedoch mit nur wenigen einfachen, aber nützlichen Headern, die die Daten umgeben. Große Browserhersteller haben die empfohlene Schaltfläche „Durchsuchen…“ übernommen, und Benutzer können problemlos das lokale Dialogfeld „Datei öffnen…“ verwenden, um Dateien zum Hochladen auszuwählen.
RFC1867 bietet weiterhin die meisten flexiblen Methoden zum Hochladen von Dateien in Ihre Webanwendung. PUT hat nur einen sehr begrenzten Nutzen. WebDAV ist für Inhaltsautoren wie FrontPage-Benutzer nützlich, aber weniger nützlich für Webentwickler, die Datei-Uploads in ihre Webanwendungen integrieren möchten. Daher ist RFC1867 die beste Möglichkeit, das Hochladen von Dateien in Webanwendungen einzubinden.
Für praktische Anwendungen stellt Microsoft Posting Acceptor kostenlos zur Verfügung. ASP versteht das Codierungsschema „multipart/form-data“ nicht. Stattdessen stellt Microsoft Posting Acceptor zur Verfügung, eine ISAPI-Anwendung, die einen REPOST an eine ASP-Seite akzeptiert, nachdem der Upload abgeschlossen ist.
SA-FileUp von Software Artisans war eine der ersten kommerziellen Active Server-Komponenten. Nach mehreren Verbesserungen liegt es nun als reine ASP-Komponente vor.
zwei.
Das Grundprinzipder ASP-basierten Datei-Upload-Implementierungsprinzipanalyse
lautet: Verwenden Sie die BinaryRead-Methode des ADO-Stream-Objekts, um alle Daten im FORM auszulesen, die erforderlichen Dateidaten abzufangen und als Binärdatei zu speichern.
Hier ist ein Beispiel für eine Datei-Upload-Seite (upload.htm):
<html>
<Körper>
<form name="Upload" Method="Post" Enctype="multipart/form-data" Action="Upload.asp">
<input type="file" name="FileName">
<INPUT TYPE="Submit" VALUE="Upload"></TD>
</form>
</body>
</html>
Das Dateiobjekt wird im Programm verwendet, sodass die mit der BinaryRead-Methode in Upload.asp gelesenen Originaldaten nicht nur die Daten der ausgewählten Datei selbst sind, sondern auch den Pfad, den Typ und die Übermittlung der Datei umfassen auf der Festplatte des Benutzers. Beschreibung des Formulardomänennamens und andere verwandte Informationen der Seite, sodass wir den spezifischen Inhalt der Datei extrahieren müssen. Der Analyse zufolge besteht die Trennlinie zwischen den Header-Informationen und den Daten aus zwei Paaren von Wagenrückläufen und Zeilenvorschüben, und am Ende gibt es auch Trennungsinformationen. Wir können die Dateidaten mit einer Methode erhalten, die der folgenden ähnelt.
Dimmen Sie FormData.FormSize,DataStart,CLStr,DivStr
FormSize=Request.TotalBytes
FormData=Request.BinaryRead(FormSize)
CLStr=ChrB(13)&ChrB(10)
DataStart=InStrB(FormData.CLStr&CLStr)+4
'4 ist die Länge von zwei Paaren von Wagenrücklauf- und Zeilenvorschubzeichen
DivStr=LeftB(FormData,InStrB(FormData,CLStr)-1)
DataSize=InStrB(DataStart+1,FormData,DivStr)-DataStart-2
FormData=MidB(FormData,DataStart,DataSize)
FormData ist der Inhalt der Datei.
Entsprechende Bearbeitungen können je nach Bedarf durchgeführt werden. Als letztes müssen Sie die Datei speichern. Es gibt zwei Möglichkeiten zum Speichern: Eine besteht darin, die Binärdatei-Operationsmethode in Programmen wie VB oder VC zu verwenden, dem Projekt die entsprechende Typbibliothek hinzuzufügen und sie schließlich in eine DLL-Datei zu kompilieren und dann die DLL-Datei bei der Verwendung zu registrieren Es. . Der Dateispeichervorgang ist wie folgt:
Öffentliche Funktion SaveFile(Pathname As String) As String
Dimmen Sie objContext als ObjectContext
Dimmen Sie objRequest als Anfrage
Setze objContext=GetObjectContext()
Setze objRequest=objContext("Request")
„Der folgende Codeabschnitt bezieht sich auf Dateispeichervorgänge: Dim FormData() As Byte, CLStr, DivStr.“
Dimmen Sie „DataStart As Long“, „DataSize As Long“.
DataSize=objRequest.TotalBytes
Redim FormData(DataSize-1)
FormData=objRequest.BinaryRead(DataSize)
CLStr=ChrB(13) & ChrB(10)
DataStart=InStrB(FormData,CLStr & CLStr)+4
DivStr=LeftB(FormData,InStrB(FormData,CLStr)-1)
DataSize=InStrB(DataStart+1,FormData,DivStr)-DataStart-2
FormData=MidB(FormData,DataStart,DataSize)
'Erstellen Sie eine Binärdatei und schreiben Sie FormData hinein. Öffnen Sie den Pfadnamen für Binärdatei als 1
Geben Sie #1,,FormData ein
Schließen Sie Nr. 1
SaveFile="OK!"
von End Function
besteht darin, die in ADO STREAM bereitgestellte Binärdatei-Operationsmethode zu verwenden. Die Anweisung zum Speichern der Datei lautet: StreamOBJ.SaveToFile (fileName,2). Bei dieser Art von Operation können wir die relevanten Operationen in einer Klassendatei speichern und bei der Anwendung einfach die Klassendatei direkt in das ASP-Programm einbinden. Spezifische Verarbeitungsmethoden finden Sie in der entsprechenden Einführung.
drei. Die Instanz der Datei-Upload-Implementierungsmethode
kann eine komponenten- oder komponentenlose Methode verwenden, um den Datei-Upload zu implementieren. Für Komponentenkategorien ist beispielsweise Microsoft Posting Acceptor (kurz MPA) eine von Microsoft veröffentlichte kostenlose Serverkomponente. Die Installation dieser Art von Komponente ist ebenfalls relativ bequem. Für Microsofts mpa führen Sie einfach die Installationsdatei aus. Für allgemeine DLL-Komponenten müssen wir sie registrieren. Um beispielsweise aspcnUP.dll zu verwenden, müssen Sie nur regsvr32 [path]aspcnUP.dll unter Windows 2000 ausführen. Das System zeigt dann eine Meldung über die erfolgreiche Registrierung an und Sie können die Komponente für komponentenlose Klassen verwenden. wie zum Beispiel www.5xsoft.coms Komponenten-Upload-Klasse-upload_5xsoft. Wenn Sie es verwenden, fügen Sie einfach die folgende Anweisung in den Handler ein:
<!--#include FILE="upload.inc"-->
Informationen zu den Eigenschaften und Betriebsmethoden im Zusammenhang mit
der Erstellung eines Upload-Objekts
finden Sie im Benutzerhandbuch dieser Komponente.Das Folgende ist der Quellcode zum Hochladen einiger Dateitypen (upload.asp), am Beispiel der Komponente aspcnUP.dll:
<% @ language="vbscript"
Setze fileUP=Server.CreateObject("aspcn.Upload")
fileUP.Maxsize=200000
fileUP.Path="d:upfile"
fileUP.Upload
Für i=0 bis fileUP.Count
fieldname=fileUP.FieldName(i)
Wenn fileUP.FileType(fieldname)="zip" Oder ileUP.FileType(fieldname)="rar" Dann
fileUP.Feldname speichern
Ende wenn
Nächste
Setzen Sie fileUP=Nothing
%>
Vier. Fazit
Das Browser-/Server-Anwendungsmodell entwickelt sich im neu eingeführten ASP von Microsoft immer noch rasant. NET verfügt über eine integrierte Funktion zum Hochladen von Dateien, die sehr einfach und bequem zu verwenden ist. Als brandneue Technologie bietet ASP. NET ist nicht nur ein einfaches Upgrade von ASP, es ist ein brandneues Framework für die Webentwicklung, das viele neue Funktionen enthält. ASP. NET bietet Code, der einfacher zu schreiben ist und eine klarere Struktur aufweist. Mithilfe dieser Codes können wir sie einfacher wiederverwenden und teilen und dadurch immer praktischere Programme entwickeln.