【问题标题】:Drupal 6 File HandlingDrupal 6 文件处理
【发布时间】:2010-12-04 17:09:53
【问题描述】:

我正在使用 Drupal 6 表单 API 处理表单中的文件上传字段。文件字段被标记为必填。 我正在执行所有正确的步骤,以便在适当的位置保存和重命名文件。

上传表格

$form = array();
....
$form['image'] = array(
    '#type' => 'file',
    '#title' => t('Upload photo'),
    '#size' => 30,
    '#required' => TRUE,
);
$form['#attributes'] = array('enctype' => "multipart/form-data");
...

表单验证处理程序

$image_field = 'image';

if (isset($_FILES['files']) && is_uploaded_file($_FILES['files']['tmp_name'][$image_field])) {
    $file = file_save_upload($image_field);
    if (!$file) {
        form_set_error($image_field, t('Error uploading file'));
        return;
    }
    $files_dir = file_directory_path();
    $contest_dir = 'contest';

    if(!file_exists($files_dir . '/' . $contest_dir) || !is_dir($files_dir . '/' . $contest_dir))
        mkdir($files_dir . '/' . $contest_dir);


    //HOW TO PASS $file OBJECT TO SUBMIT HANDLER
    $form_state['values'][$image_field] = $file;
    file_move($form_state['values'][$image_field], $files_dir."/" . $contest_dir . "/contest-". $values['email']. "-" . $file->filename);
}
else {
    form_set_error($image_field, 'Error uploading file.');
    return;
}

提交表单时

尽管文件正在上传,但表单总是报告错误Upload photo field is required.。如何处理这个问题?

如何将文件信息传递给提交处理程序?

【问题讨论】:

    标签: drupal-6 drupal-fapi


    【解决方案1】:

    您的处理程序错误。你永远不应该在 drupal 中接触 $_FILES 或 $_POST 变量,而应该只使用 drupal 工具。说了这么多,你应该的实现是这样的:

    function my_form_handler(&$form,&$form_state){/** VALIDATION FILE * */
     $extensions = 'jpeg jpg gif tiff';
     $size_limit = file_upload_max_size(); 
     $validators = array(
          'my_file_validate_extensions' => array($extensions),
          'my_file_validate_size' => array($size_limit),
      );
    
     $dest = file_directory_path();
     if ($file = file_save_upload('image', $validators, $dest)) {
      //at this point your file is uploaded, moved in the files folder and saved in the DB table files
     }
    }
    

    【讨论】:

      【解决方案2】:

      我认为您会想要使用 filefield 模块并将其附加到表单中,如下所述:

      Drupal Imagfield/Filefield in custom form

      问题有解决方案的链接:

      http://sysadminsjourney.com/content/2010/01/26/display-cck-filefield-or-imagefield-upload-widget-your-own-custom-form

      【讨论】:

        【解决方案3】:

        来自Drupal 6 Form API docs

        "注意:#required 属性不受支持(将其设置为 true 将始终导致验证错误)。相反,您可能希望使用自己的验证函数对 $_FILES 数组进行检查,并将 #required 设置为false。如果需要,您还必须添加自己所需的星号。"

        旧帖子,但我正在寻找类似的东西,并想添加它。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-04-14
          • 1970-01-01
          • 2011-08-07
          • 2020-05-12
          • 2017-12-12
          相关资源
          最近更新 更多