2010-12-04 50 views
1

我正在使用Drupal 6表單API處理表單中的文件上傳字段。該文件字段標記爲要求。 我正在做所有正確的步驟,以保存和重命名文件在適當的位置。Drupal 6文件處理

上傳表單

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

在submiting形式

形式總是報錯Upload photo field is required.雖然文件越來越上傳。如何處理這個問題?

如何通過文件信息提交處理程序?

回答

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 
} 
} 
1

Drupal 6 Form API docs

「注意:#required屬性不受支持(將其設置爲true將始終導致驗證錯誤)。相反,您可能希望使用自己的驗證函數對$ _FILES數組進行檢查,並將#required設置爲false。您還需要添加自己所需的星號,如果您需要的話。「

舊帖子,但我正在尋找類似的東西,並想通過我添加。