Upload d'images via adodb.stream et sql server

Contenu du snippet

Ce code permet comme son nom l'indique d'uploader sur un serveur distant des images via SQL Server et ADODB.Stream
Votre base SQL Server est installée sur un serveur distant. Pourquoi SQL Server ? et bien la réponse est simple, il s'agit de pouvoir mettre en local une chaine de connection à une base de données distantes ( étant donné que je ne pense pas que l'on puisse le faire avec ACCESS ... )

Pour se faire votre base de données doit contenir une table avec un champ image.
Vous avez un fichier en local pour lire les fichiers sur le disque dur, un autre fichier sur serveur distant pour réceptionner les fichiers envoyés

Source / Exemple :


'Pour commencer une page local pour mon exemple je choisi envoi.asp
'Ne pas oublier d'importer la dll permettant d'utiliser ADODB.Stream

<!--METADATA TYPE="typelib"
      UUID="00000205-0000-0010-8000-00AA006D2EA4"
     NAME="ADODB Type Library"
-->

'Ensuite la fameuse connection avec la base SQL Server
Conn = "DRIVER={SQL SERVER};user id=login; Password=motdepasse ; server=adresse de votre base;  database=nom de la base"

'On selectionne ensuite la table sensée contenir les images
Set rs = server.CreateObject("ADODB.Recordset")
SQL="SELECT * FROM images"
RS.open SQL, conn, 3, 3

'On ouvre l'objet STREAM
Set Stream = server.CreateObject("ADODB.Stream")
'On définit le type de données a lire ( ici données binaires, vous pouvez aussi mettre 1 à la place de adbinary )
Stream.Type = adTypeBinary
Stream.Open
'On définit le fichier a Uploader
Stream.loadFromFile ("c:\monrep\monfichier.extension")

'On crée un nouvel enregistrement dans la table
rs.addnew
'Mon champ image recoit les données binaires
rs.fields("image") = Stream.read
'Mise à jour de la base de données
rs.update
'Fermeture des objets
rs.close
stream.close
Set rs=nothing
Set stream=nothing
response.redirect "adressedelapagedistante"

'----------------------------------------------------------------
'Intervient maintenant la page distante
'Toujours ne pas oublier la dll

<!--METADATA TYPE="typelib"
      UUID="00000205-0000-0010-8000-00AA006D2EA4"
     NAME="ADODB Type Library"
-->

'Connection à la base SQL Server
Conn = "DRIVER={SQL SERVER};user id=login; Password=motdepasse ; server=adresse de votre base;  database=nom de la base"

'Connection a la table
Set rs = server.CreateObject("ADODB.Recordset")
'Je vais chercher le premier enregistrement dans mon exemple
SQL="SELECT * FROM images WHERE id like 1"
RS.open SQL, conn, 3, 3

'Ouverture de l'objet STREAM
Set Stream = server.CreateObject("ADODB.Stream")
'On définit le type de données a lire ( ici données binaire, vous pouvez aussi mettre 1 à la place de adbinary )
Stream.Type = adTypeBinary
Stream.Open

'On recupère les données comprise dans le champ
Stream.write rs.fields("image").value

'Maintenant on crée le fichier sur le serveur distant
'Avec une adresse physique
'Ici le mode d'écriture du fichier est en écrasement
Stream.SaveToFile "cheminphysique\lenomdufichier.extension", adSaveCreateOverWrite

'On ferme tous les objets
rs.close
stream.close
Set rs=nothing
Set stream=nothing

' Il ne reste plus qu'a vérifier ;)

Conclusion :


Pour que cela fonctionne, il faut que le serveur dispose du logiciel SQL Serveur... evidemment, que le serveur n'ai pas bloqué la fonction Stream.

- Quelques Avantages :
Facile à programmer et à amménager
Pas de composant installé sur le serveur

- Quelques Inconvénients :
Trouver un serveur qui dispose de SQL Server et n'ayant pas désactivé le Stream
Avoir sa propre liscence somme toute couteuse ;)

Enfin cela reste un moyen détourné ...

Bonne journée a tous

PS si quelqun connait une chaine de connection pour une base de données distante ACCESS étant donné que je ne sais pas si cela se fait ...

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.