<Form action=upload.asp method=post enctype=multipart/form-data>
Télécharger le fichier :<Type d'entrée=nom du fichier=fichier1><br>
<type d'entrée = nom de soumission = valeur de téléchargement = téléchargement>
</formulaire>
Parmi eux, le paramètre enctype est utilisé pour définir la méthode d'encodage MIME du formulaire lors du téléchargement d'un fichier (ou contenant une zone de texte en même temps), son attribut doit être défini sur multipart/form-data ; le fichier binaire côté serveur reçu. Le programme ASP pour le traitement des flux sera présenté plus loin dans cet article.
2. Téléchargez l'analyse du format de fichier
Avant de traiter le fichier, nous devons d'abord comprendre le format spécifique du fichier téléchargé. Nous pouvons visualiser son code binaire en écrivant le programme ASP simple suivant :
<%
filesize=Request.TotalBytes 'Obtenir la taille du fichier téléchargé
filedata=Request.BinaryRead(filesize) 'Obtenir les données binaires du fichier téléchargé
Response.BinaryWrite filedata 'Afficher les données binaires sur le navigateur
%>
En analysant le code binaire du fichier téléchargé affiché sur le navigateur, nous avons constaté que le code se compose de quatre parties (si plusieurs fichiers ou zones de texte sont téléchargés en même temps, les codes sont classés dans l'ordre de téléchargement, avec le même format ), et le contenu de chaque partie est saisi avec un retour chariot Séparé par des caractères de nouvelle ligne :
1) La première partie (drapeau de départ)
--------------------------7d329631b04d4
2) Partie 2 (Description du document)
Disposition du contenu : form-data ; nom = fichier 1 ; nom du fichier = C:/Documents and Settings/Administrateur/Mes documents/Invitation.doc Type de contenu : application/msword
Ici, nous pouvons obtenir le nom du fichier et le chemin absolu du fichier téléchargé, ainsi que le type de fichier. Ces informations sont essentielles pour enregistrer correctement le fichier.
3) Partie 3 (Contenu du document)
Autrement dit, le contenu binaire du fichier est omis.
4) Partie 4 (marque de fin)
--------------------------7d329631b04d4
Combinant le contenu des première et quatrième parties, -----------------------------7d329631b04d4 (la valeur est différente à chaque téléchargement ) Idem) agit comme un séparateur, qui marque le début et la fin d'une donnée (lorsqu'il y a plusieurs contenus téléchargés). En termes d'informations nécessaires pour enregistrer le fichier, nous devons d'abord obtenir le nom de fichier à partir du nom de fichier de la deuxième partie des données, puis localiser correctement la position de départ du fichier et enfin utiliser la technologie ASP pour enregistrer. le fichier binaire avec son nom de fichier d'origine. Si plusieurs contenus (tels que plusieurs zones de texte et fichiers) sont téléchargés en même temps, ils sont traités de la même manière. Chaque partie du contenu est incluse dans le délimiteur, mais les zones de texte et les fichiers sont exprimés de manière légèrement différente. . Cela peut être fait en analysant spécifiquement son code binaire pour comprendre.
3. Utilisez la technologie ASP pour implémenter le stockage de fichiers
Traitement du code du fichier téléchargé
1) Obtenez le code délimiteur
D'après l'analyse ci-dessus, nous savons déjà que les séparateurs jouent un rôle important dans la division de plusieurs segments de données (y compris les zones de texte et divers types de fichiers). Comme cela a été analysé précédemment, le séparateur apparaît avant le premier symbole de retour chariot et de saut de ligne. Par conséquent, le code délimiteur peut être obtenu via le programme suivant :
<%
newline=chrB(13) & chrB(10) 'newline représente le caractère binaire de retour chariot
filesize=Request.TotalBytes 'filesize est la taille du fichier téléchargé
filedata=Request.BinaryRead(filesize) 'filedata est les données binaires du fichier téléchargé
Divider=leftB(filedata,clng(instrb(filedata,newline))-1) 'divider est le diviseur
%>
Remarque : Comme nous traitons ici de bytecode binaire, toutes les fonctions utilisent sa version binaire, avec b ajouté.
2) Obtenez le contenu du fichier (ou de la zone de texte)
(1) Fonction préparatoire (convertir une chaîne binaire en chaîne)
Le contenu du fichier téléchargé n'a pas besoin de passer par le processus de conversion de binaire en chaîne et peut être enregistré directement. Cependant, si vous devez extraire le contenu de la zone de texte ou le nom du fichier, vous devez effectuer une conversion. Il est donc nécessaire d’écrire une fonction de conversion universelle adaptée aux caractères chinois. Voici le code de fonction :
Fonction BtoS (bstr)
Si non Est Null (bstr) Alors
pour i = 0 à lenb(bstr) - 1
bchr = midb(bstr,i+1,1)
Si ascb(bchr)>127 Alors 'Les caractères chinois sont des doubles octets, donc deux caractères doivent être traités ensemble
temp = temp&chr(ascw(midb(bstr, i+2, 1)&bchr))
je = je+1
Autre
temp = temp&chr(ascb(bchr))
Fin si
suivant
Fin si
BtoS=température
Fonction de fin
(2) Obtenez le contenu du fichier (ou de la zone de texte)
Dans les applications WEB réelles, l'opération de téléchargement peut impliquer plusieurs contenus, tels que plusieurs zones de texte, plusieurs fichiers, etc. Les fichiers et les zones de texte se distinguent facilement. Les données du fichier contiennent la chaîne filename=. Par conséquent, nous avons écrit la fonction générale suivante, qui peut être utilisée pour extraire à la fois le contenu du fichier et le contenu de la zone de texte (une conversion binaire est requise) :
Fonction getdata(byval data, byval diviseur, final) 'data représente la chaîne binaire diviseur représente le séparateur final représente la position finale des données ;
filename=chrb(102)&chrb(105)&chrb(108)&chrb(101)&chrb(110)&chrb(97)&chrb(109)&chrb(101)&chrb(61)&chrb(34) 'Représentation binaire de la chaîne filename=
bncrlf=chrb(13)&chrb(10) 'Caractère de retour chariot binaire
startpos = instrb(data,divider)+lenb(divider)+lenb(bncrlf) 'Position de départ
endpos = instrb(startpos,data, diviseur)-lenb(bncrlf) 'Position finale
part1 = midb(data, startpos, endpos-startpos) 'Contenu entre deux séparateurs
firstline = midb(part1, 1, instrb(part1, bncrlf)-1) ' Paragraphe de description avant le contenu
If (instrb(firstline,filename)=0) Then 'S'il s'agit d'une zone de texte, récupérez le contenu de la chaîne de la zone de texte
stemp=midb(part1,instrb(part1,bncrlf&bncrlf)+lenb(bncrlf&bncrlf),lenb(part1)-instrb(part1,bncrlf&bncrlf)+lenb(bncrlf&bncrlf))
getdata=BtoS(stemp)
Sinon 'S'il s'agit d'un fichier, récupérez le contenu binaire du fichier
Getdata=midb (part1, instrb (part1, bncrlf&bncrlf)+lenb (bncrlf&bncrlf), lenb (part1)
-instrb(part1,bncrlf&bncrlf)+lenb(bncrlf&bncrlf))
Fin si
Final = endpos
Fin de fonction
Vous pouvez obtenir le contenu du fichier (ou de la zone de texte) requis en appelant cette fonction directement dans le programme, comme indiqué ci-dessous :
<%
Contenu=getdata (données, diviseur, position)
%>
3) Obtenez le nom du fichier
Comme cela a été analysé précédemment, le champ filename= du flux de données du fichier de téléchargement contient le nom et le chemin absolu du fichier. De manière générale, il suffit d'extraire le nom du fichier dans le chemin. Voici le code du programme :
<%
namepos=instrrev(B2S(firstline),chr(92)) 'firstline est les données de la partie description obtenues ci-dessus, chr(92)
exprimer/
filename=midb(firstline,namepos+1,lenb(firstline)-namepos-1) 'Obtenir le nom du fichier
%>
Utilisez ASP pour implémenter directement la fonction de téléchargement de fichiers
Les programmeurs ASP traditionnels ne peuvent utiliser l'objet FILESYSTEMOBJECT que pour déplacer, copier, supprimer et effectuer d'autres opérations sur des fichiers texte (.txt). S'ils doivent traiter des objets binaires, ils doivent utiliser les méthodes présentées plus haut dans cet article. Cependant, l'objet ADO.STREAM dans ASP peut désormais faire fonctionner des objets texte et des objets binaires en même temps (peut être téléchargé sur http://www.microsoft.com/data), et vous pouvez l'utiliser pour implémenter directement le téléchargement de fichiers. fonction en ASP. Ci-dessous, nous présentons son processus de mise en œuvre.
1) Ouvrez l'objet STREAM
Pour les objets SREAM, si vous souhaitez enregistrer le fichier, vous devez enregistrer l'intégralité du contenu de l'objet. Par conséquent, nous devons créer deux (ou plus) objets STREAM, dont l'un est le flux de données source, qui reçoit les données binaires initiales ; l'autre est le flux de données de destination, qui reçoit les données traitées du flux de données source, et enfin enregistrer dans le fichier souhaité.
<%
set str=server.CreateObject(ADODB.Stream) 'str est le flux de données source
str.Mode=3 'Définit le mode ouvert, 3 est lisible et inscriptible
str.Type=1 'Définit le type de données, 1 est une donnée binaire
str.Ouvrir
set desc=server.CreateObject(ADODB.Stream) 'desc est le flux de données cible
desc.Mode=3
Desc.Type=1
desc.Ouvrir
%>
2) Copier du contenu entre des objets STEAM
Dans cette partie, vous devez localiser le début du fichier dans le flux de données source et trouver la longueur du contenu du fichier avant de pouvoir copier correctement le fichier dans le flux de données de destination et enregistrer le fichier. Le code du programme est le suivant :
<%
formdata=Request.BinaryRead(Request.TotalBytes) 'formdata est tout le contenu téléchargé
str.Write formdata ' Flux de données source d'affectation
str.position=count-lenb(result)-2 'la position pointe vers le début du fichier
str.copyto desc, lenb(filecotent) 'lenb(filecontent) représente la longueur du fichier
desc.SaveToFile fullpath,2 'Enregistre le fichier avec le chemin et le nom spécifiés par fullpath
%>
3) Fermez l'objet STEAM
Une fois la programmation terminée, l'objet STEAM doit être fermé et libéré comme suit :
<%
Desc.Fermer
Définir desc=rien
Rue Fermer
Définir STR = rien
%>
Résumer
Cet article donne une méthode pour implémenter directement le téléchargement de fichiers à l'aide d'ASP, qui a été bien appliquée dans le système de gestion de l'information développé par cette unité. La pratique a prouvé que cette méthode est plus simple et plus efficace que plusieurs méthodes traditionnelles de téléchargement de fichiers.