-
transfert de fichiers
Bonjour, j'utilise Visual C++ 2005 Express. J'essaie de transférer un fichier (son) depuis le dd local vers la bdd.
Lorsque j'appelle la fonction :
Oid lo_import(PGconn *conn, const char *filename)
elle renvoie tjrs 0 qui correspond à InvalidOid donc l'importation n'a pas été effectuée.
Voici le code que j'utilise :
const char *conninfo;
PGconn *conn;
conninfo = //infos sur login et mot de passe que je ne communique pas
conn = PQconnectdb(conninfo);
if (PQstatus(conn) != CONNECTION_OK)
{
connstatus="PROBLEME DE CONNECTION";
}
else
Oid oid=lo_import(conn,"E:/DSS_FLDA/1min.DSS");
J'ai vérifié que le fichier existait et qu'on pouvait y accéder en mode lecture.
Comment procéder pour effectuer ce transfert?
-
Bonjour,
avec tout le respect que je vous dois, je pense que ce n'est pas une bonne idée de stocker des fichiers directement dans une base de données, même si les "large objects" semblent avoir été conçus pour ça ...
Stockez plutôt vos fichiers quelque part sur le disque dur et n'insérez que l'url de ces fichiers dans votre base de données, ça ralentirait bien moins le reste de la base :)
De plus si un jour vous séparez la base de données du reste de l'application, vous devrez à chaque fois faire passer tout le fichier par le réseau, vous rendez-vous compte de la perte de temps que celà représente ?
Enfin bien sûr ce n'est que mon avis, libre à vous de le suivre ou pas :)
Bonne chance pour la suite ! ( sinon désolé je n'ai pas la réponse à votre "vraie" question ).
-
Bonjour,
En fait je dois faire en sorte qu'un pc connecté à un réseau local puisse recevoir n'importe quel fichier stocké sur le dd d'un pc de ce réseau.
Est-il possible de s'affranchir de l'import/export au niveau de la bdd ? Dans ce cas, il faudrait stocker le chemin du fichier qui n'est donc pas c:\... puisque cette notation repère le dd local.
-
Bonsoir,
Sous windows il me semble ( à confirmer ) que le chemin réseau d'un fichier est \\serveur\nom_du_partage\reste_du_chemin
Bien sûr tu dois partager un dossier, éventuellement protégé, et faire en sorte que les noms correspondent :)
Une autre solution serait d'installer un serveur apache ( si ce n'est pas déjà fait ) qui pourrait gérer le partage :)
Ceci dit, s'il est possible d'utiliser ce fichier depuis l'ordinateur distant, ce serait peut être préférable ... Enfin ça dépend de l'utilisation du fichier en question ;)
Bonne chance pour la suite !
-
C'est bon, j'ai réussi à effectuer l'import et l'export de fichiers en utilisant les fonctions de type 'server' et non 'client'. Pb résolu.
-
Sauf que quand j'appelle lo_import ou lo_export à partir d'un pc se connectant à la bdd du pc serveur, l'argument du chemin du fichier concerne le pc serveur et non le pc client, ce qui complique la tâche.
-
Bonjour
Il faut le stocker dans un champ de type bytea, dans ce cas pas besoin d'envoyer les fichiers coté serveur avant de les traités
-
En cherchant dans la doc de PostgreSQL 8.1 (version que j'utilise), j'ai trouvé le pb. Il faut que les fonctions lo_import et lo_export soient appelées à l'intérieur d'une transaction, c'est-à-dire entre une commande :
Code:
PQexec(conn,"BEGIN")
et une commande :
,
commandes que j'ai rajoutées.
Maintenant les fonctions lo_import et lo_export retournent SUCCESS.
En ce qui concerne le choix du champ pour stocker les fichiers, j'ai pris le type large object, je ne sais pas trop la différence avec le type bytea, à part qu'on parle de chaînes de caractère pour le type bytea, ce qui ne devrait pas convenir dans mon cas car je cherche à faire un transfert de fichier son d'un pc à un autre. Je passe donc par un stockage sur le serveur.