Bạn đang thiếu điều này trong định nghĩa biểu mẫu của bạn:
$form['#attributes']['enctype'] = 'multipart/form-data'; // If this is not here, upload will fail on submit
Đây là logic tôi sử dụng để tạo tiện ích tải lên tệp trên một biểu mẫu:
// these give us the file upload widget:
$form['#attributes']['enctype'] = 'multipart/form-data'; // If this is not here, upload will fail on submit
$form['fid'] = array( '#title' => t('Upload image'),
'#type' => 'file',
'#description' => t('Images must be one of jpg, bmp, gif or png formats.'),
);
Và đây là bản sao của logic đó, mà tôi có trong hàm gọi lại hợp lệ của biểu mẫu của tôi, bởi vì tôi có các hạn chế tên tệp hình ảnh trong logic của mình, nhưng bạn có thể đặt nó trong phần gọi lại nếu bạn muốn:
// @see: http://api.drupal.org/api/function/file_save_upload/6
// $file will become 0 if the upload doesn't exist, or an object describing the uploaded file
$file = file_save_upload( 'fid' );
error_log( 'file is "'.print_r( $file, true ).'"' );
if (!$file) {
form_set_error('fid', t('Unable to access file or file is missing.'));
}
đó là nó.
$form['#attributes']['enctype']
trong Drupal 7. Nó được chăm sóc tự động