我正在上传文件,我想告诉用户他是否要删除或覆盖他以前的文件...所以我想在删除之前显示一个控制器操作的弹出窗口,所以如果用户说是,那么文件将会被覆盖,如果不是,它会在前一个文件名之前放一个时间戳......
这可能吗?
这是我的代码......
<?php
class AttachableBehavior extends ModelBehavior {
var $_defaults = array( 'label' => 'attachment',
'location' => 'files',
'errorMessages' => array('isUploaded' => 'Malicious file upload.',
'moveUploaded' => 'Error moving file upload.',
'isValidType' => 'Invalid file type. Please check your file type and try again.',
'isValidSize' => 'Invalid file size. Please check your file size and try again.'
),
'thumbQuality' => 80,
'maxSize' => '1048576',
'fields' => array('attachmentLocation' => 'attachmentLocation',
'attachmentWidth' => 'attachmentWidth',
'attachmentHeight' => 'attachmentHeight',
'attachmentName' => 'attachmentName',
'attachmentType' => 'attachmentType',
'attachmentSize' => 'attachmentSize'),
);
var $_validThumbTypes = array('image/jpeg', 'image/pjpeg');
var $_attachmentRoot = null;
var $_errorMsg = "Error uploading file";
var $settings = array();
var $model = null;
function setup(&$model, $config = array())
{
$this->settings[$model->name] = array_merge($this->_defaults, $config);
$this->model = $model;
$this->_attachmentRoot = WWW_ROOT . str_replace(array('/', '\\'), array(DS,DS), $this->settings[$model->name]['location']) . DS;
}
function beforeSave(&$model)
{
extract($this->settings[$model->name]);
$attachment = $model->data[$model->name][$label];
if (!empty($attachment['name']))
{
$model->data[$model->name][$fields['attachmentName']] = ($this->_fileExists($this->_attachmentRoot . $attachment['name'])) ? time() . '_' . $attachment['name'] : $attachment['name'];
$model->data[$model->name][$fields['attachmentType']] = $attachment['type'];
$model->data[$model->name][$fields['attachmentSize']] = $attachment['size'];
$model->data[$model->name][$fields['attachmentLocation']] = $location;
if ($model->id > 0)
{
$record = $model->findById($model->id);
$this->_deleteAttachments($record[$model->name][$fields['attachmentName']]);
}
if (!$this->_isUploaded($attachment) ||
!$this->_isValidSize($attachment['size']) ||
!$this->_isValidType($attachment) ||
!$this->_dirExists($this->_attachmentRoot) ||
!$this->_moveUploaded($attachment['tmp_name'], $model->data[$model->name][$fields['attachmentName']])
)
{
$model->validationErrors[$label] = $this->_errorMsg;
return false;
}
if (in_array($attachment['type'], $this->_validThumbTypes))
{
list($width, $height) = getimagesize($this->_attachmentRoot . $model->data[$model->name][$fields['attachmentName']]);
$model->data[$model->name][$fields['attachmentWidth']] = $width;
$model->data[$model->name][$fields['attachmentHeight']] = $height;
if (isset($this->settings[$model->name]['thumbnails']))
{
foreach ($this->settings[$model->name]['thumbnails'] as $dir => $size)
{
list($width, $height) = explode('x', strtolower($size));
if($this->_dirExists($this->_attachmentRoot . $dir))
{
$this->_resizeToThumb($model->data[$model->name][$fields['attachmentName']], $dir, $width, $height);
}
}
}
}
}
else
{
$model->validationErrors[$label] = $this->_errorMsg;
return false;
}
// pr($attachment);
// exit();
return true;
}
function beforeDelete(&$model)
{
$model->read(null, $model->id);
$this->_deleteAttachments($model->data[$model->name]['attachmentName']);
return true;
}
# protected methods
function _moveUploaded($tmpName, $attachmentName)
{
if (move_uploaded_file($tmpName, $this->_attachmentRoot . $attachmentName ))
{
return true;
}
$this->_errorMsg = $this->settings[$this->model->name]['errorMessages']['moveUploaded'];
return false;
}
function _isUploaded($attachment)
{
if (isset($attachment['error']) && $attachment['error'] == 0 || !empty($attachment['tmp_name']) && $attachment['tmp_name'] != 'none')
{
return is_uploaded_file($attachment['tmp_name']);
}
$this->_errorMsg = $this->settings[$this->model->name]['errorMessages']['isUploaded'];
return false;
}
function _isValidType($attachment)
{
$ext = substr($attachment['name'], strrpos($attachment['name'], '.') + 1);
if (isset($this->settings[$this->model->name]['types'][$attachment['type']]) &&
$ext == $this->settings[$this->model->name]['types'][$attachment['type']])
{
return true;
}
$this->_errorMsg = $this->settings[$this->model->name]['errorMessages']['isValidType'];
return false;
}
function _isValidSize($size)
{
if($size == 0) return false;
if ($size <= $this->settings[$this->model->name]['maxSize'])
{
return true;
}
$this->_errorMsg = $this->settings[$this->model->name]['errorMessages']['isValidSize'];
return false;
}
function _dirExists($dir)
{
if (!file_exists($dir))
{
trigger_error(__("AttachableBehavior Error - Please create '{$dir}' directory and set permissions for uploading.", true), E_USER_WARNING);
return false;
}
return true;
}
function _fileExists($file)
{
if (file_exists($file))
{
return true;
}
return false;
}
function _deleteFile($file)
{
if (file_exists($file))
{
return unlink($file);
}
return false;
}
function _deleteAttachments($attachment)
{
$this->_deleteFile($this->_attachmentRoot . $attachment);
if (isset($this->settings[$this->model->name]['thumbnails']))
{
foreach ($this->settings[$this->model->name]['thumbnails'] as $dir => $size)
{
if ($this->_fileExists($this->_attachmentRoot . $dir . DS . $attachment) && !empty($attachment))
{
$this->_deleteFile($this->_attachmentRoot . $dir . DS . $attachment);
}
}
}
}
function _resizeToThumb($imgName, $dir, $canvasWidth, $canvasHeight)
{
$img = $this->_attachmentRoot . $imgName;
list($imgWidth, $imgHeight) = getimagesize($img);
$ratioOrig = $imgWidth / $imgHeight;
if(($canvasWidth / $canvasHeight) > $ratioOrig)
{
$canvasWidth = $canvasHeight * $ratioOrig;
}
else
{
$canvasHeight = $canvasWidth / $ratioOrig;
}
$original = imagecreatefromjpeg($img);
$canvas = imagecreatetruecolor($canvasWidth, $canvasHeight);
imagecopyresampled($canvas, $original, 0, 0, 0, 0, $canvasWidth, $canvasHeight, $imgWidth, $imgHeight);
$createJpg = imagejpeg($canvas, $this->_attachmentRoot . $dir . DS . $imgName, $this->settings[$this->model->name]['thumbQuality']);
imagedestroy($canvas);
imagedestroy($original);
if($createJpg)
{
return true;
}
return false;
}
}
?>
答案 0 :(得分:1)
没关系......我以其他方式管理它......我只是在文件名前加上一个时间戳,让用户别无选择,只能上传文件......