[英]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.