Auteur : Zhui Feng
utilise ASP depuis longtemps pour écrire des applications de sites Web. Parmi eux, la façon de télécharger des fichiers sur le serveur est probablement le problème le plus courant, en particulier le téléchargement d'images. , si vous souhaitez mettre en œuvre une fonction « une étoile par jour » similaire à celle fournie par la communauté virtuelle NetEase dans votre propre communauté, vous devez fournir la fonction permettant aux internautes de télécharger des photos. Pour télécharger des fichiers image sur le serveur, vous pouvez utiliser divers composants de téléchargement de fichiers gratuits. Bien qu'ils soient très puissants, dans de nombreux cas, nous ne pouvons utiliser que l'espace gratuit pris en charge par ASP ou louer l'espace virtuel d'autres personnes. il nous est tout simplement impossible d'utiliser le composant de téléchargement de fichiers ; quant au deuxième cas, nous devons également payer beaucoup « d'argent ». À moins que vous ne disposiez de votre propre hôte virtuel, vous pouvez facilement installer les composants dont vous avez besoin sur le serveur. Cette situation est hors de portée pour la plupart des gens. Alors nous ne pouvons rien faire ? Haha, la réponse est oui (bien sûr que oui, sinon je ne pourrais pas écrire cet article). Utilisons du code ASP pur pour implémenter la fonction de téléchargement d'images et de leur enregistrement dans la base de données (d'ailleurs, nous implémentons également la fonction d'affichage des images dans la base de données sur la page Web).
Commençons par nous familiariser avec les méthodes objet que nous utiliserons. Nous utilisons généralement l'objet Request pour obtenir les données transmises depuis la page précédente. De même, nous pouvons également utiliser l'objet Request pour obtenir les données du fichier téléchargé. La méthode utilisée est Request.BinaryRead(). La méthode que nous utilisons pour lire les données d'image de la base de données et les afficher sur la page Web est la suivante :
Request.BinaryWrite(). Lorsque nous récupérons les données d'image et les enregistrons dans la base de données, nous ne pouvons pas utiliser directement l'instruction Insert pour faire fonctionner la base de données. Nous devons plutôt utiliser la méthode AppendChunk d'ADO. De même, pour lire les données d'image dans la base de données, nous devons utiliser. Méthode GetChunk. La syntaxe spécifique de chaque méthode est la suivante :
*Syntaxe Request.BinaryRead :
variante=Request.BinaryRead(compte)
paramètre
variante
La valeur de retour contient les données lues sur le client.
compter
Indique la quantité de données à lire sur le client. Cette valeur est inférieure ou égale à la quantité de données obtenues à l'aide de la méthode Request.TotalBytes.
*Syntaxe Request.BinaryWrite :
Requête.BinaryWritedata
paramètre
données
Le paquet à écrire dans le navigateur client.
*Syntaxe Request.TotalBytes :
variante = Requête.TotalBytes
paramètre
variante
Renvoie le nombre d'octets de données lues sur le client.
*La syntaxe AppendChunk ajoute des données à un objet de texte volumineux, de champ de données binaires ou de paramètre.
objet.AppendChunkData
paramètre
objet objectField ou Parameter
Type de variante de données, contenant des données ajoutées à l'objet.
Description Utilisez la méthode AppendChunk de l'objet Field ou Parameter pour remplir de longues données binaires ou caractères dans l'objet. Lorsque la mémoire système est limitée, vous pouvez utiliser la méthode AppendChunk pour effectuer certaines opérations, mais pas toutes, sur des valeurs entières longues.
*La syntaxe GetChunk renvoie tout ou partie du contenu d'un objet Field de texte ou de données binaires volumineux.
variable = champ. GetChunk (taille)
La valeur de retour renvoie le type de variante.
paramètre
Taille de l'expression entière longue, égale au nombre d'octets ou de caractères à récupérer.
Description Utilisez la méthode GetChunk de l'objet Field pour récupérer tout ou partie de ses données binaires ou caractères longues. Lorsque la mémoire système est limitée, vous pouvez utiliser la méthode GetChunk pour traiter certaines valeurs entières longues, mais pas toutes.
Les données renvoyées par l'appel GetChunk seront affectées à la "variable". Si la taille est supérieure aux données restantes, alors
GetChunk renvoie simplement les données restantes sans remplir la "variable" avec des espaces. Si le champ est vide, alors
La méthode GetChunk renvoie Null.
Chaque appel GetChunk suivant récupérera les données en commençant là où l'appel GetChunk précédent s'est arrêté. Toutefois, si vous récupérez les données d'un champ, puis définissez ou lisez la valeur d'un autre champ dans l'enregistrement en cours, ADO supposera que les données ont été récupérées du premier champ. Si la méthode GetChunk est à nouveau appelée sur le premier champ, ADO interprétera l'appel comme une nouvelle opération GetChunk et commencera la lecture depuis le début de l'enregistrement. Si l'autre objet Recordset n'est pas une copie du premier objet Recordset, l'accès aux champs qu'il contient n'interrompra pas l'opération GetChunk.
Si le bit adFldLong dans la propriété Attributes de l'objet Field est défini sur True, vous pouvez utiliser la méthode GetChunk sur le champ.
S'il n'y a aucun enregistrement actuel lors de l'utilisation de la méthode Getchunk sur un objet Field, l'erreur 3021 (Aucun enregistrement actuel) sera générée.
Ensuite, nous allons concevoir notre base de données à titre de test, notre structure de base de données est la suivante (access2000) :
Nom du champ type description identifiant numéro automatique valeur de clé primaire
L'objet img OLE est utilisé pour enregistrer les données d'image
Pour MSSQLServer7, la structure correspondante est la suivante :
Nom du champ type description id int (Identité) valeur de clé primaire
img image est utilisé pour enregistrer les données d'image
Nous commençons maintenant à écrire formellement la partie de téléchargement de notre code ASP pur. Tout d'abord, nous avons une interface de téléchargement fournie à l'utilisateur, qui permet à l'utilisateur de sélectionner l'image à télécharger. Le code est le suivant (upload.htm) :
<html>
<corps>
<centre>
<form name="mainForm" enctype="multipart/form-data" action="process.asp" method=post>
<inputtype=filename=mefile><br>
<inputtype=submitname=okvalue="OK">
</form>
</centre>
</corps>
</html>
Notez que enctype="multipart/form-data" doit avoir cet attribut dans le formulaire, sinon les données téléchargées ne seront pas obtenues. Ensuite, nous devons effectuer le traitement nécessaire sur les données obtenues à partir du navigateur dans process.asp, car les données que nous obtenons dans process.asp contiennent non seulement les données des images téléchargées que nous souhaitons, mais contiennent également d'autres informations inutiles dont nous avons besoin. pour éliminer les données redondantes et enregistrer les données d'image traitées dans la base de données, nous prenons ici access2000 comme exemple. Le code spécifique est le suivant (process.asp) :
<%
réponse.buffer=true
formsize=request.totalbytes
formdata=request.binaryread(formsize)
bncrlf=chrB(13)&chrB(10)
diviseur=leftB(formdata,clng(instrb(formdata,bncrlf))-1)
datastart=instrb(formdata,bncrlf&bncrlf)+4
dataend=instrb(datastart+1,formdata,divider)-datastart
mes données = midb (formdata, datastart, dataend)
setconnGraph=server.CreateObject("ADODB.connection")
connGraph.ConnectionString="driver={MicrosoftAccessDriver(*.mdb)};DBQ="&server.MapPath("images.mdb")&";uid=;PWD=;"
connGraph.Open
setrec=server.createobject("ADODB.recordset")
rec.Open"SELECT*FROM[images]whereidisnull",connGraph,1,3
rec.addnew
rec("img").appendchunkmydata
rec.mise à jour
rec.fermer
setrec = rien
setconnGraph = rien
%>
D'accord, nous avons maintenant enregistré les images téléchargées dans une base de données nommée images.mdb. Le travail restant consiste à afficher les données d'image dans la base de données sur la page Web. Généralement, en HTML, la balise <IMG> est utilisée pour afficher les images, c'est-à-dire <IMGSRC="chemin de l'image">, mais nos images sont enregistrées dans la base de données. Qu'est-ce que le "chemin de l'image" ? Haha, en fait, en plus de spécifier le chemin, cet attribut SRC peut aussi être utilisé comme ceci :
<IMGSRC="showimg.asp?id=xxx">
Il suffit donc de lire les données qualifiées de la base de données dans showimg.asp et de les renvoyer à l'attribut SRC. Le code spécifique est le suivant (showimg.asp) :
<%
setconnGraph=server.CreateObject("ADODB.connection")
connGraph.ConnectionString="driver={MicrosoftAccessDriver(*.mdb)};DBQ="&
server.MapPath("images.mdb")&";uid=;PWD=;"
connGraph.Open
setrec=server.createobject("ADODB.recordset")
strsql="selectimgfromimageswhereid="&trim(request("id"))
rec.openstrsql,connGraph,1,1
Réponse.ContentType="image/*"
Réponse.BinaryWriterec("img").getChunk(7500000)
rec.fermer
setrec = rien
setconnGraph = rien
%>
Notez que Response.ContentType="image/*" doit être spécifié avant la sortie vers le navigateur.
afin d'afficher l'image normalement.
La dernière chose à noter est que le traitement dans mon process.asp ne prend pas en compte le fait qu'il existe d'autres données dans la première page (upload.htm), telles que <INPUT type=tesxt name=userid>, etc., si il y a ces éléments, votre process.asp doit prêter attention au traitement des données inutiles.