我正在上传两张具有两种不同尺寸要求的图片。
设置验证规则后,将设置第二个参数(CI 文档所说的"人类可读"字段)。我使用自定义验证回调函数来处理图像验证(设置配置,调用 upload->do_upload() )。我收到的错误消息是通用的"您尝试上传的图像超过最大高度或宽度"。
如何传递正在验证的字段的人类可读名称(例如"图像 1"或"图像 2"),以便用户知道哪个错误消息与哪个图像上传字段相关?
编辑:我想出了一个部分解决方案:通过在验证set_message前面加上字段名称,我现在可以将错误分组到标题下。然而,现在的问题不同了。对于具有不同参数的每个图像,自定义验证函数是相同的,但如果两者都有错误消息,则第二个分组将显示它自己的和上一个。
例如,图像 1 的文件大小太大。图像 2 太宽。图 2 的错误消息显示文件大小过大且过宽。
我真的不想仅仅为了这个而复制该功能......
我过去遇到过我认为类似的事情。
如果要循环浏览上传的文件,对不同的文件使用不同的$config
,则需要在每次迭代之间初始化上传类:
$this->upload->initialize( $config );
你有粘贴或代码示例吗?
这是我在早期项目中所做的,用于根据文件类型处理更改$config:
如果( $_FILES ){ $this->加载>库("上传");
foreach ( $_FILES as $key => $value )
{
$file_type = ( $key == 'image' ) ? 'image' : 'document';
if( ! empty( $value['name'] ))
{
$config = array(
'upload_path' => './uploads/materials/' . strtolower($material['code']) . '/',
'allowed_types' => ($file_type == 'image') ? 'jpg|jpeg|png' : 'jpg|jpeg|png|pdf',
'max_size' => 1024 * 10,
'max_width' => 19200,
'max_height' => 12800,
'overwrite' => TRUE,
);
// ------------------------------------------------------------------------
// Here is the key idea: You need to initialize each time you change the $config
// ------------------------------------------------------------------------
$this->upload->initialize( $config );
if( $this->upload->do_upload( $key ))
{
//Success! Files are all uploaded.
$uploaded = $this->upload->data();
$data['file_data'] = array(
'parent_id' => $data['material']->id,
'filename' => $uploaded['file_name'],
'filename_original' => $uploaded['client_name'],
'type' => $file_type,
'location' => $config['upload_path'],
'description' => '',
);
// Add the file details to the database
$this->material->add_material_file( $data );
}
else
{
// ERROR! Something went wrong... alert the user.
$errors = $this->upload->display_errors();
$this->session->set_flashdata( 'flashError', $errors );
}
}
}
}