2009-07-08 8 views
5

私はローカルマシン上にPDFファイルを持っています。このファイルをSQLデータベースのバイナリBLOBにアップロードします。ここで言及された他のアプローチ[Binary Data in MySQLはすべてPHPを使用します。このPDFファイルをLinuxのコマンドラインにアップロードする簡単な方法が欲しい。残念ながら、私はリモートファイルシステムにアクセスすることはできませんので、他の場所で述べたようにファイルへのリンクを保存するだけではいけません...これらのPDFファイルの仮想ファイルシステムとしてこのMySQLデータベースを使用する必要があります..バイナリデータをmysqlに保存

PhPの例では、INSERTコマンドを使用する前にスラッシュをエスケープするだけです。 Linuxのコマンドラインでこれを達成する簡単な方法はありますか?

答えて

0

これが私の問題を完全に解決するかどうかはわかりませんが、MySQLの上に実装されたファイルシステム層が見つかりました。私はそれを使って自分のPDFファイルをBLOBとして自動的に保存することができると思います... <よりも意味のあるPDFファイルへの構造化アクセスのために、このファイルシステムのPDFファイルにキーを格納する方法を把握する必要があります>。

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

1

GUIブラウザーと同じPOSTを実行するには、カールブラウザーを使用します。あなたのGUIブラウザが送信する要求をスニッフィングし、次にそれをカールで複製します。

+0

おそらく私はポストでこれについて明確ではなかった...私はGUIを使用していない。 PDFファイルをコマンドラインからSQLデータベースにアップロードしたいだけです。 INSERT INTOテーブルの設定pdfBlob = 、name = 'stupid.pdf'; 私の質問は、 'stupid.pdf'からを生成する方法です。 – badkya

+1

申し訳ありませんが、現在、PHPベースのクライアントを使用してファイルをアップロードしていたと思います。これは、カールを使用した明確なコマンドライン・アプローチを与えてくれました。 –

4

小さなシェルスクリプトと組み合わせてmysql関数LOAD_FILEを使用して、これを行うことができます。

未テストコードは次のとおりです。

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

そして、あなたはこのようにそれを使用することができます:エラーチェック、適切な一時ファイルの作成、エスケープやその他の細かな点で

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

より良い実装をする練習として残されています読者。 LOAD_FILE()を使用するには、MySQLでFILE特権が必要であり、フルパスでファイルが必要です。

+0

LOAD_FILEは、MySQLサーバーをホストしているリモートマシンにファイルが存在することを前提としています。私はそのようなアクセス権を持っていません。 – badkya

+0

あなたは正しいです。私は遠隔のmysqlに関する部分を見逃していました。私はこれをあなたの好みのプログラミング言語でコード化しなければならないと思います。これは、適切な言語で100行以下で実行できるはずです。 –

関連する問題