[英]custom validation rule for joomla file upload
我正在尝试使用自定义验证规则来验证文件上传,如下所示,但它不起作用。
class JFormRuleResume extends JFormRule
{
public function test(&$element, $value, $group = null, &$input = null, &$form = null)
{
jimport('joomla.filesystem.file');
jimport('joomla.filesystem.folder');
$jinput = JFactory::getApplication()->input;
$fileInput = new JInput($_FILES);
$file = $fileInput->get('jform', null, 'files', 'array');
//$files = $jinput->files->get('jform');
//$file = $files['resume'];
$filename = JFile::makeSafe($file['name']['resume']);
$filesize = $file['size'];
if (strtolower(JFile::getExt($filename))!='pdf') {
$element->addAttribute('message', strtolower(JFile::getExt($filename)));
return false;
}
if($filesize<2000000){
$element->addAttribute('message', "File size bigger than 2MB");
return false;
}
//var_dump($files);
return true;
}
}
无论我上传pdf文件还是其他具有不同扩展名的文件,都会返回错误“无效的文件类型”。
请赐教我什么问题?
我的领域看起来像这样:
<field
name="resume"
type="file"
label="Resume"
description=""
size="40"
accept="application/pdf"
validate="resume"
required="true"
/>
UPDATE
这是对我到目前为止发现的更新。 帖子数据
$requestData = JRequest::getVar('jform', null, 'post', 'array');
不要获取文件输入值。 因此,在验证$ data = $ model-> validate($ form,$ requestData)形式之前,我必须在控制器操作中添加以下代码。
$requestData = JRequest::getVar('jform', null, 'post', 'array');
// Get the file data array from the request.
$jinput = JFactory::getApplication()->input;
$fileInput = new JInput($_FILES);
$file = $fileInput->get('jform', null, 'files', 'array');
// Make the file name safe.
$filename = JFile::makeSafe($file['name']['resume']);
$requestData['resume'] = strtolower($filename);
JRequest::setVar('jform', $requestData );
$form = $model->getForm();
if (!$form) {
JError::raiseError(500, $model->getError());
return false;
}
$data = $model->validate($form, $requestData);
这样我就可以将文件输入值注入post数组。 但是问题仍然存在,因为上述验证仅部分起作用。 验证仅适用于docx,png,htm,php,txt等文件。如果我提交doc,pdf(大于2MB),则zip文件验证根本不起作用,而是显示回没有数据并且带有警告警告的所有字段均丢失的表单。
这很奇怪,我迫切需要一些帮助。
最终解决了上传较大文件时重新显示表格的问题。 这是服务器问题,必须在我的Wamp服务器的php.ini中更改以下内容
upload_max_filesize = 100M
post_max_size = 100M
关于文件上传价值不在发布中的第二个问题对我来说是新事物,我不知道。 必须先分别上传文件,然后获取保存文件的名称,然后使用该名称插入数据库中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.