私は、ユーザーが異なる MIME タイプの複数のファイルをアップロードするプロジェクトに取り組んでおり、ファイルをデータベース (Mysql with InnoDB engeen) に保存したいと考えています。これらは私の質問です:
1/ MIME タイプごとに複数のテーブルを作成する必要がありますか、それともタイプごとに異なる行を作成する必要がありますか?
2/ mysql の行型で BLOB をフィールドの型としてテストしましたが、DB に問題があるようです!!!
-- MEDIUM BLOB と LONG BLOB のどちらかを試してみました --
3/ すべての MIME タイプを別の行またはテーブルに保存する必要がある場合、このファイルタイプに適したタイプはどれですか:
a/pdf b/jpeg c/png d/gif e /video/mp4 f/application/word
1741 次
1 に答える
0
これは私がテストしたばかりの小さな例です
表: ファイル
id (主キー、自動インクリメント)
ファイル名 (varchar 255)
タイプ (varchar 255)
ファイル (ラージブロブ)
エンコーディング: utf8_unicode_ci
<?php
$hostname = 'localhost';
$username = 'root';
$password = '';
try
{
$dbh = new PDO("mysql:host=$hostname;dbname=test", $username, $password);
echo 'Connected to database';
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = $dbh->prepare("INSERT INTO `files` (filename, type, file) VALUES('img.png', 'image/png', :bin)");
$sql->bindParam("bin", file_get_contents("img.png"));
$sql->execute();
$sql = $dbh->prepare("SELECT * FROM `files` WHERE `filename`='img.png'");
$sql->execute();
$result = $sql->fetch();
$file = fopen("new-".$result['filename'], "w+");
$w = fwrite($file, $result['file']);
fclose($file);
}
catch(PDOException $e)
{
echo $e->getMessage();
}
?>
あなたがやろうとしていることについて:
固定ファイルの代わりに、アップロードされた一時ファイルを使用します。
そのファイルの MIME タイプを使用します (php で取得できます)。
ファイルを読み取る必要がある場合は、単純に BLOB フィールドを読み取り、ファイル名を名前として使用してファイルに書き込みます。
BLOB フィールドに問題はありませんでした。その問題を解決できない場合は、TEXT フィールドを使用して base64_encode(file) をそこに格納できます。
于 2013-10-26T10:43:24.847 に答える