Résumé : Dans un environnement d'application basé sur un navigateur/serveur, le téléchargement de divers types de fichiers dans le navigateur a toujours été l'un des problèmes qui affectent les applications de gestion de fichiers des utilisateurs. Il existe trois mécanismes pour télécharger des fichiers en HTTP : RFC1867, PUT et WebDAV. Une méthode d'implémentation courante consiste à utiliser un nouveau type introduit dans la RFC1867 : les objets File et ADO Stream. Cet article traite des méthodes de téléchargement et des principes de mise en œuvre ci-dessus, et donne des exemples de solutions spécifiques.
Mots-clés : composant ASP objet FILE
Actuellement, les applications basées sur le modèle navigateur/serveur sont plus populaires. Lorsque les utilisateurs doivent transférer des fichiers vers le serveur, l'une des méthodes courantes consiste à exécuter un serveur FTP et à définir le répertoire FTP par défaut de chaque utilisateur comme répertoire de base Web de l'utilisateur, afin que l'utilisateur puisse exécuter le programme client FTP et télécharger des fichiers sur le serveur FTP. répertoire Web spécifié. Cela nécessite que les utilisateurs sachent comment utiliser le programme client FTP. Par conséquent, cette solution n’est réalisable que pour les utilisateurs expérimentés et familiers avec FTP. Si nous pouvons intégrer la fonction de téléchargement de fichiers au Web afin que les utilisateurs puissent effectuer la tâche de téléchargement en utilisant uniquement un navigateur Web, cela leur sera très pratique. Cependant, en raison de la limitation selon laquelle File System Object ne peut transmettre que des fichiers texte, le plus gros problème d'ASP est le téléchargement de fichiers. Ce qui suit décrit comment télécharger des fichiers dans une page Web basée sur le protocole HTTP.
un. Trois mécanismes de téléchargement via HTTP
Il existe trois mécanismes de téléchargement via HTTP : RFC1867, PUT et WebDAV.
PUT est un nouveau verbe HTTP introduit dans HTTP 1.1. Lorsque le serveur Web reçoit un HTTP PUT et le nom de l'objet, il authentifie l'utilisateur, reçoit le contenu du flux HTTP et le stocke directement sur le serveur Web. Parce que cela peut perturber un site Web, il perd également le plus grand avantage du HTTP : la programmabilité du serveur. Dans le cas de PUT, le serveur gère lui-même la requête : il n'y a pas de place pour que les applications CGI ou ASP interviennent. La seule façon pour votre application de capturer les PUT est d'opérer à un niveau bas, la couche de filtrage ISAPI. Pour des raisons correspondantes, l’application de PUT est très limitée.
WebDAV permet l'authentification et la traduction distribuées du contenu Web. Il introduit plusieurs nouveaux verbes HTTP qui permettent de télécharger, de verrouiller/déverrouiller et d'enregistrer/vérifier du contenu Web via HTTP. "Enregistrer sur le Web" dans Office 2000 est implémenté via WebDAV. Si tout ce qui vous intéresse est de télécharger du contenu, WebDAV fonctionne très bien et résout de nombreux problèmes. Cependant, si vous devez télécharger des fichiers au sein de votre application Web, WebDAV ne vous est d'aucune utilité. Comme HTTP PUT, ces verbes WebDAV sont interprétés par le serveur et non par l'application Web. Vous devez travailler sur la couche de filtrage ISAPI pour accéder à ces verbes de WebDAV et interpréter le contenu de votre application.
La RFC1867 ( http://www.ietf.org/rfc/rfc1867.txt ) a été utilisée comme norme proposée avant d'être finalement acceptée par le W3C en HTML3.2. C'est une idée très simple mais puissante : définir un nouveau type dans un champ de formulaire.
<INPUT TYPE="FILE">
Et ajout de différents schémas de codage au formulaire lui-même, au lieu d'utiliser le typique :
<FORM ACTION="formproc.asp" METHOD="POST">
mais en utilisant :
<FORM ACTION="formproc .asp " METHOD="POST" ENCTYPE="multipart/form-data">
Ce schéma de codage est plus efficace que le schéma de codage de formulaire par défaut "application/x-url-encoded" lors de la transmission de grandes quantités de données. Le codage URL n'a qu'un jeu de caractères très limité. Tous les caractères qui dépassent le jeu de caractères doivent être remplacés par « %nn », où nn représente les 2 chiffres hexadécimaux correspondants. Par exemple, même les espaces ordinaires doivent être remplacés par « %20 ». La RFC1867, quant à elle, utilise le codage MIME en plusieurs parties, comme on le voit couramment dans les messages électroniques, pour transmettre de grandes quantités de données sans codage, mais avec seulement quelques en-têtes simples mais utiles entourant les données. Les principaux fabricants de navigateurs ont adopté le bouton « Parcourir… » recommandé, et les utilisateurs peuvent facilement utiliser la boîte de dialogue locale « Ouvrir un fichier… » pour sélectionner les fichiers à télécharger.
La RFC1867 laisse toujours la plupart des méthodes flexibles de téléchargement de fichiers vers votre application Web. PUT a une utilisation très limitée. WebDAV est utile pour les auteurs de contenu, tels que les utilisateurs de FrontPage, mais moins pour les développeurs Web qui souhaitent intégrer des téléchargements de fichiers dans leurs applications Web. Par conséquent, la RFC1867 constitue le meilleur moyen d’inclure le téléchargement de fichiers dans les applications Web.
Dans les applications pratiques, Microsoft fournit gratuitement Posting Acceptor. ASP ne comprend pas le schéma de codage « multipart/form-data ». Au lieu de cela, Microsoft fournit Posting Acceptor, une application ISAPI qui accepte un REPOST sur une page ASP une fois le téléchargement terminé.
SA-FileUp de Software Artisans a été l'un des premiers composants commerciaux d'Active Server. Après plusieurs améliorations, il existe désormais en tant que pur composant ASP.
deux.
Le principe de basede l'analyse du principe de mise en œuvre du téléchargement de fichiers basé sur ASP
est le suivant : utilisez la méthode BinaryRead de l'objet ADO Stream pour lire toutes les données du FORMULAIRE, intercepter les données de fichier requises et les enregistrer en tant que fichier binaire.
Voici un exemple de page de téléchargement de fichier (upload.htm) :
<html>
<corps>
<form name="Upload" Method="Post" Enctype="multipart/form-data" Action="Upload.asp">
<input type="file" name="FileName">
<INPUT TYPE="Soumettre" VALUE="Télécharger"></TD>
</form>
</corps>
</html>
L'objet fichier est utilisé dans le programme, de sorte que les données originales lues à l'aide de la méthode BinaryRead dans Upload.asp ne soient pas seulement les données du fichier sélectionné lui-même, mais incluent également le chemin, le type et la soumission du fichier. sur le disque dur de l'utilisateur. Description du nom de domaine du formulaire et autres informations associées de la page, de sorte que nous devons extraire le contenu spécifique du fichier. Selon l'analyse, la ligne de démarcation entre les informations d'en-tête et les données est constituée de deux paires de retours chariot et de sauts de ligne, et il y a également des informations de séparation à la fin. Nous pouvons obtenir les données du fichier en utilisant une méthode similaire à la suivante.
Dim FormData.FormSize,DataStart,CLStr,DivStr
FormSize=Request.TotalBytes
FormData=Request.BinaryRead(FormSize)
CLStr=ChrB(13)&ChrB(10)
DataStart=InStrB(FormData.CLStr&CLStr)+4
'4 est la longueur de deux paires de caractères de retour chariot et de saut de ligne
DivStr=GaucheB(FormData,InStrB(FormData,CLStr)-1)
DataSize=InStrB(DataStart+1,FormData,DivStr)-DataStart-2
FormData = MidB (FormData, DataStart, DataSize)
FormData est le contenu du fichier.
Le traitement correspondant peut être effectué selon les besoins. La dernière chose à faire est de sauvegarder le fichier. Il existe deux façons d'enregistrer : l'une consiste à utiliser la méthode d'opération de fichier binaire dans des programmes tels que VB ou VC, à ajouter la bibliothèque de types appropriée au projet, et enfin à la compiler dans un fichier DLL, puis à enregistrer le fichier DLL lors de l'utilisation. il. . La procédure de stockage des fichiers est la suivante :
Fonction publique SaveFile(Pathname As String) As String
Dim objContext comme ObjectContext
Dim objRequest comme demande
Définir objContext=GetObjectContext()
Définir objRequest=objContext("Demande")
'Le morceau de code suivant est lié aux opérations de stockage de fichiers Dim FormData() As Byte, CLStr, DivStr
Dim DataStart As Long, DataSize As Long
DataSize=objRequest.TotalBytes
Redim FormData (DataSize-1)
FormData=objRequest.BinaryRead(DataSize)
CLStr=ChrB(13) et ChrB(10)
DataStart=InStrB(FormData,CLStr & CLStr)+4
DivStr=GaucheB(FormData,InStrB(FormData,CLStr)-1)
DataSize=InStrB(DataStart+1,FormData,DivStr)-DataStart-2
FormData = MidB (FormData, DataStart, DataSize)
'Créez un fichier binaire et écrivez-y FormData Open Pathname For Binary As 1
Mettez #1, FormData
Fermer #1
SauvegardeFichier="OK!"
de End Function
consiste à utiliser la méthode d'opération de fichier binaire fournie dans ADO STREAM. L'instruction permettant d'enregistrer le fichier est : StreamOBJ.SaveToFile (fileName,2). Dans ce type d'opération, nous pouvons stocker les opérations pertinentes dans un fichier de classe et, lors de son application, inclure simplement le fichier de classe directement dans le programme ASP. Pour les méthodes de traitement spécifiques, veuillez vous référer à l'introduction correspondante.
trois. L'instance de méthode d'implémentation de téléchargement de fichiers
peut utiliser une méthode avec ou sans composant pour implémenter le téléchargement de fichiers. Pour les catégories de composants, par exemple, Microsoft Posting Acceptor (MPA en abrégé) est un composant serveur gratuit publié par Microsoft. L'installation de ce type de composant est également relativement pratique. Pour le mpa de Microsoft, exécutez simplement son fichier d'installation. Pour les composants DLL généraux, nous devons les enregistrer. Par exemple, pour utiliser aspcnUP.dll, il vous suffit d'exécuter regsvr32 [path]aspcnUP.dll sur Windows 2000, et le système vous demandera un message d'enregistrement réussi et vous pourrez utiliser le composant pour les classes sans composant ; comme le composant de téléchargement class-upload_5xsoft de www.5xsoft.com . Lorsque vous l'utilisez, incluez simplement l'instruction suivante dans le gestionnaire :
<!--#include FILE="upload.inc"-->
Pour les propriétés et les méthodes de fonctionnement liées à
la création d'un objet de téléchargement
, veuillez vous référer au manuel d'utilisation de ce composant.Voici le code source pour télécharger certains types de fichiers (upload.asp), en prenant le composant aspcnUP.dll comme exemple :
<% @ language="vbscript"
Définir fileUP=Server.CreateObject("aspcn.Upload")
fichierUP.Maxsize=200000
fileUP.Path="d:upfile"
fichierUP.Upload
Pour i=0 à fileUP.Count
nom de champ=fileUP.FieldName(i)
Si fileUP.FileType(fieldname)="zip" Ou ileUP.FileType(fieldname)="rar" Alors
fileUP.Save nom du champ
Fin si
Suivant
Définir fileUP=Rien
%>
Quatre. Conclusion
Le modèle d'application navigateur/serveur continue de se développer rapidement dans l'ASP récemment lancé par Microsoft. NET dispose d'une fonction de téléchargement de fichiers intégrée, très simple et pratique à utiliser. En tant que toute nouvelle technologie, ASP. NET n'est pas qu'une simple mise à niveau d'ASP, c'est un tout nouveau framework de développement Web qui contient de nombreuses nouvelles fonctionnalités. ASPIC. NET fournit un code plus facile à écrire et doté d'une structure plus claire. Grâce à ces codes, nous les réutiliserons et les partagerons plus facilement, développant ainsi des programmes de plus en plus pratiques.