5

我在本地机器上有一个 PDF 文件。我想将此文件上传到 SQL 数据库上的 BINARY BLOB 中。这里提到的其他方法 [ MySQL 中的二进制数据都使用 PHP。我想要一种简单干净的方式在 Linux 命令行上上传这个 PDF 文件。不幸的是,我无法访问远程文件系统,所以不能像其他地方提到的那样只存储文件的链接......我有点需要使用这个 MySQL 数据库作为这些 PDF 文件的虚拟文件系统......

从 PhP 示例中,似乎只需要在使用 INSERT 命令之前转义斜杠吗?有没有一种简单的方法可以在 Linux 命令行上实现这一点?

4

4 回答 4

4

我猜你可以使用 mysql 函数LOAD_FILE和一个小的 shellscript 来做到这一点。

未经测试的代码如下:

#!/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 权限和文件的完整路径。

于 2009-07-08T16:20:35.160 回答
1

您可以使用 curl 浏览器提交与 GUI 浏览器相同的 POST。嗅探您的 GUI 浏览器发送的请求,然后使用 curl 复制该请求。

于 2009-07-08T15:16:01.637 回答
0

不确定这是否完全解决了我的问题,但我发现在 MySQL 之上实现了一个文件系统层。我想我可以用它来自动将我的 PDF 文件存储为 BLOB... 仍然需要弄清楚如何在这个文件系统中存储 PDF 文件的密钥,以便基于比 < inode,seq 更有意义的东西对 PDF 文件进行结构化访问>。

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

于 2009-07-08T22:35:18.553 回答
0

请参阅 MySQL 食谱中的这篇文章,其中还包含一个示例脚本:

http://www.freeopenbook.com/mysqlcookbook/mysqlckbk-CHP-17-SECT-7.html

但它有一些限制,最值得注意的是文件必须存储在与 mysql 服务器相同的主机上。

于 2011-07-01T14:02:16.413 回答