私は perl と MongoDB::GridFS (他の mongo モジュールと一緒に) を使用して、ファイルの保存と取得を行っています。.txt では問題なく動作しますが、.docx を保存して取得したいです。これが私のコードです:
#!usr/bin/perl
use MongoDB::GridFS;
use MongoDB;
use MongoDB::Database;
use MongoDB::OID;
my $conn = new MongoDB::Connection;
my $db = $conn->test; #name of our local db is test...default of mongoDB
my $coll = $db->err0; #err0 is the name of the collection
my $grid = $db->get_gridfs;
my $fh = IO::File->new("wordtoyamutha.docx", "r");
$grid->insert($fh, {"filename" => "test"});
my $outfile = IO::File->new("wordtoyamutha.docx", "w");
my $file = $grid->find_one({"filename" => "test"});;
$file->print($outfile);
最初に「wordtoyamutha.docx」という .docx を作成し、最後の 3 行をコメントアウトして上記のコードを実行しました。正常に動作し、MongoDB の fs.files に新しいエントリが表示されました。次に、.docx を削除し、すべての「保存」コードをコメント アウトしてコードを実行しました。明確にするために、これらの行は上記からコメント アウトされています。
my $fh = IO::File->new("wordtoyamutha.docx", "r");
$grid->insert($fh, {"filename" => "test"});
Wordtoyamutha というタイトルの docx が表示されました...しかし、それを開こうとすると、Word が破損して読めなくなったと訴えました。
ファイルを取得する他の方法を知りません...これが Perl MongoDB::GridFS が提案するすべてです...ここでのトリックは何ですか?
Word からの正確なエラーがダイログに表示され、「コンテンツに問題があるため、ファイル wordtoyamutha を開けません」と表示されます。