我正在尝试将Uploader
插件用作我在我的网络应用程序中使用的Behavior
模型的User
。我已将它用于我在此处显示的名为filename
的配置:
<?php
class Avatar extends AppModel {
public $name = 'Avatar';
public $actsAs = array (
'Uploader.Attachment' => array (
'filename' => array (
'name' => 'setNameAsImgId',
'saveAsFilename' => true,
'uploadDir' => '/files/avatars/160/',
'dbColumn' => 'filename',
'defaultPath' => 'default.png',
'maxNameLength' => 20,
'overwrite' => true,
'stopSave' => true,
'allowEmpty' => false,
'transforms' => array (
array('method' => 'resize', 'width' => 160, 'height' => 160, 'dbColumn' => 'filename', 'append' => false, 'overwrite' => true)
)
)
)
);
// and so on...
?>
此配置将文件保存到文件夹/files/avatars/160
,我通过Users
控制器保存所有大小为160像素的图像:
<?php
class UsersController extends AppController {
public function add () {
if ($this->User->Avatar->save($this->request->data)) {
// do some code...
}
}
在视图add
中,我将插入此代码以上传文件:
echo $this->Form->input('Avatar.filename', array('type' => 'file', 'label'=>'Upload the avatar '));
如果我只保存一个名为filename
的配置,如上例所示,这样可以正常工作,我的问题是我需要保存不同大小和相同图像的裁剪,所以我想保存一个列表大小如下:
/files/avatars/160/filename.jpg
/files/avatars/48/filename.jpg
为此,我想在我的Avatar
模型中添加另一个配置到此
<?php
class Avatar extends AppModel {
public $name = 'Avatar';
public $actsAs = array (
'Uploader.Attachment' => array (
'filename' => array (
'name' => 'setNameAsImgId',
'saveAsFilename' => true,
'uploadDir' => '/files/avatars/160/',
'dbColumn' => 'filename',
'defaultPath' => 'default.png',
'maxNameLength' => 20,
'overwrite' => true,
'stopSave' => true,
'allowEmpty' => false,
'transforms' => array (
array('method' => 'resize', 'width' => 160, 'height' => 160, 'dbColumn' => 'filename', 'append' => false, 'overwrite' => true)
)
),
'small' => array (
'name' => 'setNameAsImgId',
'saveAsFilename' => true,
'uploadDir' => '/files/avatars/48/',
'dbColumn' => 'filename',
'defaultPath' => 'default.png',
'maxNameLength' => 20,
'overwrite' => true,
'stopSave' => true,
'allowEmpty' => false,
'transforms' => array (
array('method' => 'resize', 'width' => 48, 'height' => 48, 'dbColumn' => 'filename', 'append' => false, 'overwrite' => true)
)
)
)
);
// and so on...
?>
如何设置UsersController
以使用Avatar
保存同一图像的多个裁剪?
我是否还应该更改add
视图以使其有效?
我不会在表单中使用多个输入文件。
答案 0 :(得分:0)
你可以这样做:
$this->Form->input('Avatar.filename.', array('type' => 'file', 'multiple');
如您所见,我在字段名称后面添加了.
和多个属性。有了它,您可以进行多次上传。所以$this->request->data
中的结果是这样的:
[Avatar] => array(
['filename'] => array(
[0] => array(
'name' => '...',
'tmp_name' => '...',
...
),
[1] => array(
'name' => '...',
'tmp_name' => '...',
...
),
[2] => array(
'name' => '...',
'tmp_name' => '...',
...
),
[3] => array(
'name' => '...',
'tmp_name' => '...',
...
)
)
)
现在,您需要使用简单的 foreach 来改变您的行为。
我希望这对你有所帮助。
对不起我的英语:)