2009-07-08 5 views
5

J'ai un fichier PDF sur une machine locale. Je veux télécharger ce fichier dans un BLOB BINARY sur une base de données SQL. D'autres approches mentionnées ici [Binary Data in MySQL utilisent tous PHP. Je veux un moyen simple de télécharger ce fichier PDF sur la ligne de commande Linux. Malheureusement, je n'ai pas accès au système de fichiers distant donc je ne peux pas simplement stocker des liens vers le fichier comme mentionné ailleurs ... J'ai besoin d'utiliser cette base de données MySQL comme un système de fichiers virtuel pour ces fichiers PDF. Exemple de php, il semble que tout ce qui est nécessaire est d'échapper les barres obliques avant d'utiliser la commande INSERT? Existe-t-il un moyen simple d'y parvenir sur une ligne de commande Linux?stocker des données binaires dans mysql

Répondre

0

Je ne sais pas si cela résout complètement mon problème, mais j'ai trouvé une couche de système de fichiers implémentée au-dessus de MySQL. Je suppose que je peux l'utiliser pour stocker mes fichiers PDF comme BLOB automatiquement ... encore besoin de savoir comment stocker les clés du fichier PDF dans ce système de fichiers pour un accès structuré au fichier PDF basé sur quelque chose de plus significatif que < inode, seq >.

http://sourceforge.net/projects/mysqlfs/ et
http://www.linux.com/archive/feature/127055

1

Vous pouvez utiliser le navigateur curl pour soumettre le même POST que votre navigateur graphique. Renifler la demande que votre navigateur GUI envoie, puis répliquer cela avec curl.

+0

Peut-être que je n'étais pas clair à ce sujet dans le post ... Je n'utilise pas d'interface graphique. Je veux juste télécharger un fichier PDF à la base de données SQL à partir de la ligne de commande. INSERT INTO ensemble de tables pdfBlob = , name = 'stupide.pdf'; Ma question est de savoir comment générer à partir de 'stupid.pdf' – badkya

+1

Désolé, je pensais que vous utilisiez actuellement un client PHP pour télécharger des fichiers. Cela vous aurait donné une approche de ligne de commande claire en utilisant curl. –

4

Vous pouvez utiliser la fonction mysql LOAD_FILE en conjonction avec un petit shellscript pour le faire, je suppose.

code non testé suit:

#!/bin/bash 

if [ -z $1 ] 
then 
    echo "usage: insert.sh <filename>" 
else 
    SQL="INSERT INTO file_table (blob_column, filename) VALUES(LOAD_FILE('$1'), '$1')" 

    echo "$SQL" > /tmp/insert.sql 
    cat /tmp/insert.sql | mysql -u user -p -h localhost db 
fi 

Et vous pouvez l'utiliser comme ceci:

<prompt>./insert.sh /full/path/to/file 

Une meilleure mise en œuvre avec la vérification des erreurs, la création d'tempfile appropriée, échapper et d'autres raffinements est laissé comme un exercice à le lecteur. Notez que l'utilisation de LOAD_FILE() nécessite le privilège FILE dans MySQL et un chemin d'accès complet au fichier.

+0

Ma compréhension est LOAD_FILE nécessite que le fichier soit présent sur la machine distante hébergeant le serveur MySQL. Je n'ai pas cet accès. – badkya

+0

vous avez raison. J'ai raté la partie sur le mysql étant distant. Je suppose que vous devrez le coder dans votre langage de programmation préféré. Cela devrait être faisable en moins de 100 lignes dans n'importe quelle langue. –

Questions connexes