0

私は、ユーザーが異なる 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

4

1 に答える 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();
}
?>

あなたがやろうとしていることについて:

  1. 固定ファイルの代わりに、アップロードされた一時ファイルを使用します。

  2. そのファイルの MIME タイプを使用します (php で取得できます)。

  3. ファイルを読み取る必要がある場合は、単純に BLOB フィールドを読み取り、ファイル名を名前として使用してファイルに書き込みます。

BLOB フィールドに問題はありませんでした。その問題を解決できない場合は、TEXT フィールドを使用して base64_encode(file) をそこに格納できます。

于 2013-10-26T10:43:24.847 に答える