簡體   English   中英

cakePHP meioupload,將圖像上傳到每個model的不同文件夾

[英]cakePHP meioupload, upload image to a different folder for each model

我使用 meioupload 上傳 cakePHP 中的圖像,我使用一個名為“附件”的表來保存上傳的圖像信息,這是我的附件表的結構:

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;

我目前有另外 2 個表通過 class 字段(表名)和 foreign_id 與此相關聯。 現在我的問題是,如何將上傳的圖像保存到每個 model 的不同文件夾中?

例如:我想將我的帖子圖片保存到“post”文件夾中,並將我的個人資料圖片保存到“profile”文件夾中

更新:在我的附件 model

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 :假設我目前有3個表,“附件”“帖子”和“個人資料”,作為meioupload的那個是“附件”,每次我通過“帖子”或“個人資料”上傳圖片時,我將圖像信息保存到“附件”中,“附件”中的foreign_id和class字段是將“附件”連接到“帖子”和“配置文件”的字段。

更新#3:我遵循了 Dunhamzzz 關於動態使用行為的建議,並提出了這個解決方案,並且它有效。

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

謝謝

答案在您的 MeioUpload 中,特別是 'dir' 選項,您可以將{ModelName}{fieldName}放入以更改文件的保存位置。 這是行為本身的默認值:

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

更新

為了讓 MeioUpload 支持同一 model 的不同設置,您可以嘗試動態附加行為,這樣您就可以隨意更改設置。

例如在您的帖子中

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

請務必閱讀文檔中關於行為的部分,它有望幫助您在每個操作的基礎上制定解決方案,而不是行為附帶的每個模型。

這是 $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”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM