1

我正在使用 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.尽管文件正在上传,但表单总是报告错误。如何处理这个问题?

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

4

3 回答 3

2

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

自定义表单中的 Drupal Imagfield/Filefield

这个问题有一个解决方案的链接:

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

于 2010-12-22T20:55:32.087 回答
2

你的处理程序错了。你永远不应该在 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
 }
}
于 2010-12-22T17:53:42.383 回答
1

来自Drupal 6 Form API 文档

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

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

于 2013-04-03T19:12:25.190 回答