2009-07-08 73 views
5

Tôi có tệp PDF trên máy cục bộ. Tôi muốn tải tệp này lên BLOB BINARY trên cơ sở dữ liệu SQL. Các cách tiếp cận khác được đề cập ở đây [Binary Data in MySQL tất cả đều sử dụng PHP. Tôi muốn một cách đơn giản, sạch sẽ để tải lên tệp PDF này trên dòng lệnh Linux. Thật không may, tôi không có quyền truy cập vào hệ thống tập tin từ xa vì vậy không thể lưu trữ các liên kết đến tệp như đã đề cập ở đâu đó ... Tôi cần phải sử dụng cơ sở dữ liệu MySQL này làm hệ thống tệp ảo cho các tệp PDF này ..lưu trữ dữ liệu nhị phân trong mysql

Từ PhP ví dụ, có vẻ như tất cả những gì được yêu cầu là để thoát khỏi các dấu gạch chéo trước khi sử dụng lệnh INSERT? Có một cách đơn giản để đạt được điều đó trên một dòng lệnh Linux?

Trả lời

0

Không chắc chắn nếu điều này hoàn toàn giải quyết được vấn đề của tôi, nhưng tôi đã tìm thấy một lớp hệ thống tệp được triển khai trên MySQL. Tôi đoán tôi có thể sử dụng để lưu trữ các tệp PDF của mình dưới dạng BLOB tự động ... vẫn cần tìm cách lưu trữ khóa vào tệp PDF trong hệ thống tệp này để truy cập có cấu trúc tệp PDF dựa trên nội dung nào đó có ý nghĩa hơn < inode, seq >.

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

1

Bạn có thể sử dụng trình duyệt curl để gửi cùng một POST mà trình duyệt GUI của bạn thực hiện. Đánh dấu yêu cầu mà trình duyệt GUI của bạn gửi đi, sau đó nhân rộng với curl.

+0

Có lẽ tôi không rõ về điều này trong bài đăng ... Tôi không sử dụng bất kỳ GUI nào. Tôi chỉ muốn tải tệp PDF lên cơ sở dữ liệu SQL từ dòng lệnh. INSERT INTO bảng SET pdfBlob = , name = 'stupid.pdf'; Câu hỏi của tôi là cách tạo từ 'stupid.pdf' – badkya

+1

Xin lỗi, tôi nghĩ bạn hiện đang sử dụng ứng dụng khách dựa trên PHP để tải tệp lên. Điều đó sẽ cho bạn một cách tiếp cận dòng lệnh rõ ràng bằng cách sử dụng curl. –

4

Bạn có thể sử dụng hàm mysql LOAD_FILE kết hợp với một shellscript nhỏ để làm điều này tôi đoán.

đang chưa được kiểm tra sau:

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

Và bạn có thể sử dụng nó như thế này:

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

Better thực hiện với kiểm tra lỗi, tạo tempfile thích hợp, thoát và niceties khác là trái như một bài tập độc giả. Lưu ý rằng việc sử dụng LOAD_FILE() yêu cầu đặc quyền FILE trong MySQL và đường dẫn đầy đủ của tệp.

+0

Sự hiểu biết của tôi là LOAD_FILE yêu cầu tệp phải có mặt trên máy từ xa lưu trữ máy chủ MySQL. Tôi không có quyền truy cập như vậy. – badkya

+0

bạn nói đúng. Tôi bị mất một phần về mysql là từ xa. Tôi đoán bạn sẽ phải viết mã này bằng ngôn ngữ lập trình yêu thích của bạn. Điều này có thể thực hiện được dưới 100 dòng với bất kỳ ngôn ngữ phù hợp nào. –

Các vấn đề liên quan