2009-07-08 20 views
5

Tengo un archivo PDF en una máquina local. Quiero subir este archivo a un BLOB BINARIO en una base de datos SQL. Otros enfoques mencionados aquí [Binary Data in MySQL todos utilizan PHP. Quiero una forma simple y limpia de cargar este archivo PDF en la línea de comandos de Linux. Lamentablemente, no tengo acceso al sistema de archivos remoto, así que no puedo almacenar enlaces al archivo como se menciona en otro lugar ... Necesito utilizar esta base de datos MySQL como un sistema de archivos virtual para estos archivos PDF ..almacenamiento de datos binarios en mysql

Ejemplo de PhP, parece que todo lo que se requiere es escapar de las barras antes de usar el comando INSERTAR? ¿Hay una manera simple de lograr eso en una línea de comandos de Linux?

Respuesta

0

No estoy seguro si esto resuelve completamente mi problema, pero encontré una capa del sistema de archivos implementada sobre MySQL. Creo que puedo usar eso para almacenar mis archivos PDF como BLOBs automáticamente ... todavía necesito descubrir cómo almacenar las claves del archivo PDF en este sistema de archivos para acceder de forma estructurada al archivo PDF basado en algo más significativo que < inode, seq >.

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

1

Puede usar el navegador curl para enviar la misma POST que su navegador GUI. Detecte la solicitud que envía su navegador GUI y luego replíquela con curl.

+0

Quizás no tenía claro esto en la publicación ... No estoy usando ninguna GUI. Solo quiero subir un archivo PDF a la base de datos SQL desde la línea de comandos. INSERTAR EN LA tabla SET pdfBlob = , name = 'stupid.pdf'; Mi pregunta es cómo generar de 'stupid.pdf' – badkya

+1

Lo siento, pensé que actualmente estabas usando un cliente PHP para subir archivos. Eso le habría dado un enfoque claro de línea de comandos usando curl. –

4

Puede utilizar la función mysql LOAD_FILE junto con un pequeño shellscript para hacer esto, supongo.

código no probado sigue:

#!/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 

y se podía utilizar de esta manera:

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

Mejor aplicación con la comprobación de errores, la creación de archivo temporal adecuada, escapando y otros detalles se deja como un ejercicio para el lector. Tenga en cuenta que el uso de LOAD_FILE() requiere el privilegio FILE en MySQL y una ruta completa del archivo.

+0

Según tengo entendido, LOAD_FILE requiere que el archivo esté presente en la máquina remota que aloja el servidor MySQL. No tengo tal acceso. – badkya

+0

tienes razón. Me perdí la parte sobre que el mysql es remoto. Supongo que tendrás que codificar esto en tu lenguaje de programación favorito. Esto debería ser factible en menos de 100 líneas en cualquier idioma apropiado. –

Cuestiones relacionadas