drupal 7 file_save_upload 返回 false

标签 drupal drupal-7 drupal-nodes form-api

我有一个自定义表单,其中有一个字段供用户上传图像文件(他们的 Logo )。在表单验证 Hook 中,我实现了 file_save_upload,它不断返回 false。我可以看到文件实际上在上传时保存在正确的位置,那么为什么 file_save_upload 不起作用?

表单字段:

 $form['company_logo'] = array(
  '#type' => 'managed_file',
  '#title' => t('Company Logo'),
  '#description' => t('Allowed extensions: gif png jpg jpeg'),
  '#upload_location' => 'public://uploads/',
  '#upload_validators' => array(
    'file_validate_extensions' => array('gif png jpg jpeg'),
    // Pass the maximum file size in bytes
    //'file_validate_size' => array(MAX_FILE_SIZE*1024*1024),
  ),
);

验证 Hook :

    $file = file_save_upload( 'company_logo' , array(),  'public://uploads/', FILE_EXISTS_RENAME);
   if (!$file) {
      form_set_error('company_logo', t('Unable to access file or file is missing.'));
   }

最佳答案

托管文件元素会为您处理上传文件的移动,因此无需手动调用 file_save_upload()

由于 file_save_upload() 中的这些行,您将得到 NULL 返回:

// Make sure there's an upload to process.
if (empty($_FILES['files']['name'][$source])) {
  return NULL;
}

由于文件已被处理,因此该函数无需执行任何操作。

您可以通过向表单添加提交处理程序并使用类似于的代码来保留文件条目

$file = file_load($form_state['values']['company_logo']);
$file->status = FILE_STATUS_PERMANENT;
file_save($file);

关于drupal 7 file_save_upload 返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18807069/

相关文章:

drupal - 如何允许用户将大图像(> 5 GB)上传到 Drupal 站点?

linux - 安装 Apache solr Centos 5 专用服务器

javascript - 如何将数据库查询打印到 javascript 数组?

indexing - 添加 Drupal 节点记录的方法

在 Drupal 中直观地对节点进行排序

php - 德鲁帕尔 7.x : how to apply styles to RSS feed in node?

drupal - 是否可以使用模板文件为 AJAX 调用返回 HTML?

php - Drupal站点不断崩溃-求助调试

Drupal 8 模块开发依赖项