我正在尝试使用自定义验证规则验证文件上传,但不起作用。
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文件还是其他扩展名不同的文件,错误&#34;文件类型无效&#34;退回。
请赐教我的问题是什么?
我的字段如下:
<field
name="resume"
type="file"
label="Resume"
description=""
size="40"
accept="application/pdf"
validate="resume"
required="true"
/>
更新
这是我迄今为止所发现的内容的更新。发布数据
$requestData = JRequest::getVar('jform', null, 'post', 'array');
不提取文件输入值。因此,在我验证表单$ data = $ model-&gt; 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文件验证根本不起作用,而是显示回来没有数据的表单,以及缺少所有字段的验证警告。
这很奇怪,我迫切需要一些帮助。
答案 0 :(得分:0)
最后通过上传更大尺寸的文件时重新显示表单的问题。这是一个服务器问题,不得不在我的wamp服务器的php.ini中更改以下内容
upload_max_filesize = 100M
post_max_size = 100M
关于文件上传值不在帖子中的第二个问题对我来说是一件新事,我不知道。必须先单独上传文件,然后获取保存文件的名称,然后使用该名称插入数据库。