【问题标题】:CI upload image validation h/w error with 'human' field?CI 上传图像验证硬件错误与“人类”字段?
【发布时间】:2013-01-16 17:19:34
【问题描述】:

我正在上传两张具有两种不同尺寸要求的图片。

设置验证规则后,将设置第二个参数(CI 文档所说的“人类可读”字段)。我使用自定义验证回调函数来处理图像验证(设置配置,调用 upload->do_upload() )。我收到的错误消息是通用的“您尝试上传的图像超出了最大高度或宽度。”

如何传递正在验证的字段的人类可读名称(例如“图像 1”或“图像 2”),以便用户知道哪个错误消息与哪个图像上传字段相关?

编辑: 我想出了一个部分解决方案: 通过在验证 set_message 前加上字段名称,我现在可以将错误分组到一个标题下。然而问题现在不同了。每个图像的自定义验证功能都相同,但参数不同,但如果两者都有错误消息,则第二组显示它自己的和上一个。

例如,图像 1 的文件太大。图 2 太宽了。图 2 的错误消息显示文件过大且过宽。

我真的不想为了这个而复制这个功能......

【问题讨论】:

  • 为了澄清,我上传图片没有问题。我已经有一个图片上传工作得很好。现在有不止一张图片,我需要让图片验证错误说明它与哪个字段相关。

标签: codeigniter validation file-upload


【解决方案1】:

我过去曾遇到过我认为类似的事情。

如果你正在循环浏览你上传的文件,不同的文件使用不同的$config,你需要在每次迭代之间初始化上传类:

$this->upload->initialize( $config );

你有 pastebin 或类似的代码示例吗?

这是我在早期项目中所做的,用于根据文件类型处理更改 $config:

如果($_FILES) { $this->load->library('upload');

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 );
        }
    }
}

}

【讨论】:

    猜你喜欢
    • 2014-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-18
    • 1970-01-01
    • 2017-03-06
    • 1970-01-01
    • 2017-05-21
    相关资源
    最近更新 更多