2009-07-08 20 views
5

Ho un file PDF su un computer locale. Voglio caricare questo file in un BLOB BINARIO su un database SQL. Altri approcci menzionati qui [Binary Data in MySQL utilizzano tutti PHP. Voglio un modo semplice e pulito per caricare questo file PDF sulla riga di comando di Linux. Sfortunatamente, non ho accesso al filesystem remoto, quindi non posso semplicemente memorizzare i collegamenti al file come menzionato altrove ... Ho bisogno di usare questo database MySQL come un filesystem virtuale per questi file PDF ..memorizzazione di dati binari in mysql

Dal Esempio di PhP, sembra che tutto ciò che è necessario è di sfuggire alle barre prima di usare il comando INSERT? C'è un modo semplice per ottenerlo su una linea di comando di Linux?

risposta

0

Non sono sicuro se questo risolva completamente il mio problema, ma ho trovato un livello di file system implementato su MySQL. Immagino di poterlo usare per archiviare i miei file PDF come BLOB automaticamente ... Devo ancora capire come memorizzare le chiavi nel file PDF in questo file system per l'accesso strutturato al file PDF basato su qualcosa di più significativo dell'inode <, seq >.

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

1

È possibile utilizzare il browser di arricciatura per inviare lo stesso POST del browser della GUI. Annota la richiesta inviata dal browser della GUI, quindi replicala con il ricciolo.

+0

Forse non ero chiaro su questo nel post ... Non sto usando alcuna GUI. Voglio solo caricare un file PDF nel database SQL dalla riga di comando. INSERT INTO tabella SET pdfBlob = , name = 'stupid.pdf'; La mia domanda è come generare da 'stupid.pdf' – badkya

+1

Spiacente, ho pensato che stavate usando un client basato su PHP per caricare i file. Questo ti avrebbe dato un chiaro approccio da linea di comando usando l'arricciatura. –

4

È possibile utilizzare la funzione mysql LOAD_FILE in combinazione con un piccolo script di shell per fare ciò, credo.

codice non testato segue:

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

e si potrebbe usare in questo modo:

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

migliore applicazione con il controllo degli errori, la creazione tempfile corretta, fuggire e altre sottigliezze è lasciata come esercizio al il lettore. Si noti che l'uso di LOAD_FILE() richiede il privilegio FILE in MySQL e un percorso completo del file.

+0

La mia comprensione è LOAD_FILE richiede che il file sia presente sulla macchina remota che ospita il server MySQL. Non ho questo tipo di accesso. – badkya

+0

hai ragione. Ho perso la parte relativa al fatto che mysql era remoto. Direi che dovrai codificarlo nel tuo linguaggio di programmazione preferito. Questo dovrebbe essere fattibile in meno di 100 righe in qualsiasi lingua appropriata. –