我使用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连接。现在我的问题是,如何将上传的图像保存到每个模型的不同文件夹中?
例如:我想将我的帖子图片保存到'post'文件夹并将我的个人资料图片保存到'个人资料'文件夹
我的附件模型中的更新
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
)
)
)
)
);
UPDATE#2 :假设我目前有3个表,“附件”“发布”和“个人资料”,每次上传图片时,作为meioupload的行为是“附件”通过“发布”或“个人资料”,我将图像信息保存到“附件”中,“附件”中的foreign_id和类字段是将“附件”连接到“发布”和“个人资料”的字段。
更新#3:我遵循Dunhamzzz关于动态使用行为的建议,并提出了这个解决方案,并且有效。
$this->Attachment->Behaviors->attach(
'MeioUpload', array(
'filename' => array(
'dir' => 'avatars'
)
));
由于
答案 0 :(得分:0)
答案在您的MeioUpload中,特别是'dir'选项,您可以将{ModelName}
或{fieldName}
放入以更改文件保存的位置。以下是行为本身的默认值:
dir' => 'uploads{DS}{ModelName}{DS}{fieldName}',
<强>更新强>
为了让MeioUpload支持同一型号的不同设置,您可以尝试attaching the behaviour on the fly,这样您就可以随意更改设置。
例如在您的帖子操作中
$this->Attachment->Behaviours->attach('MeioUpload', array('dir' => '/uploads/posts/');
请务必阅读有关文档行为的部分,它有望帮助您在每个操作的基础上制定解决方案,而不是与行为相关的每个模型。
答案 1 :(得分: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'
),
)
),
如您所见,您可以修改一个关键的“目录”