0

私は meioupload を使用して CakePHP で画像をアップロードします。「attachment」というテーブルを使用して、アップロードされた画像の情報を保存します。これが私の添付ファイル テーブルの構造です。

CREATE TABLE IF NOT EXISTS `attachments` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `created` datetime NOT NULL,
  `modified` datetime NOT NULL,
  `class` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  `foreign_id` bigint(20) unsigned NOT NULL,
  `filename` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  `dir` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  `mimetype` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
  `filesize` bigint(20) DEFAULT NULL,
  `height` bigint(20) DEFAULT NULL,
  `width` bigint(20) DEFAULT NULL,
  `description` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1;

そして、現在、クラスフィールド(テーブル名)とforeign_idを介してこれに接続された別の2つのテーブルがあります。今私の質問は、アップロードされた画像をモデルごとに異なるフォルダーに保存するにはどうすればよいですか?

例: 投稿の画像を「post」フォルダーに保存し、プロフィール画像を「profile」フォルダーに保存したい

更新:私の愛着モデルで

public $actsAs = array(
    'MeioUpload' => array(
        'filename' => array(
            'dir' => 'post', #i set the default folder as 'post' at the moment
            'create_directory' => true,
            'allowed_mime' => array(
                'image/jpeg',
                'image/pjpeg',
                'image/png'
            ),
            'allowed_ext' => array(
                '.jpg',
                '.jpeg',
                '.png'
            ),
            'thumbsizes' => array(                  
                'large' => array(
                    'width' => 500,
                    'height' => 500
                ),
                'small' => array(
                    'width' => 100,
                    'height' => 100
                )
            )
        )
    )
);

更新#2:現在、「投稿」または「プロファイル」を介して画像をアップロードするたびに、actAs meiouploadが「添付ファイル」である「添付ファイル」「投稿」および「プロファイル」の3つのテーブルがあるとしましょう。画像情報を「attachment」に保存します。「attachment」のforeign_idおよびclassフィールドは、「attachment」を「post」および「profile」に接続するものです。

更新#3:私はその場で動作を使用することに関するDunhamzzzの提案に従い、この解決策を考え出し、それが機能しました。

$this->Attachment->Behaviors->attach(
    'MeioUpload', array(
        'filename' => array(
            'dir' => 'avatars'
        )
    ));

ありがとう

4

2 に答える 2

0

答えはMeioUploadにあります。具体的には、「dir」オプションです。ファイルの保存場所を変更するために配置{ModelName}または挿入できます。{fieldName}動作自体のデフォルトは次のとおりです。

dir' => 'uploads{DS}{ModelName}{DS}{fieldName}',

アップデート

MeioUploadで同じモデルのさまざまな設定をサポートできるようにするには、ビヘイビアーをその場でアタッチしてみてください。これにより、設定を自由に変更できます。

例:投稿アクション

$this->Attachment->Behaviours->attach('MeioUpload', array('dir' => '/uploads/posts/');

ドキュメントの動作に関する部分を必ず読んでください。動作に付属するモデルごとではなく、アクションごとにソリューションを作成するのに役立つことを願っています。

于 2011-06-10T09:38:19.190 に答える
0

$actAs 配列の例を次に示します。

    'MeioUpload' => array(
        'filename' => array(
            'dir' => 'files/banners',
            'create_directory' => false,
            'allowed_mime' => array(
                'image/jpeg',
                'image/pjpeg',
                'image/gif',
                'image/png'
            ),
            'allowed_ext' => array(
                '.jpg',
                '.jpeg',
                '.png',
                '.gif'
            ),
        )
    ),

ご覧のとおり、変更できるキー「dir」があります

于 2011-06-10T09:49:29.907 に答える