Drupal - file_save_data --> 设置类型

Posted

技术标签:

【中文标题】Drupal - file_save_data --> 设置类型【英文标题】:Drupal - file_save_data -- > set type 【发布时间】:2015-02-12 09:48:31 【问题描述】:

如何在 drupal 7 中为文件设置文件类型? 我想以编程方式创建上传的文件

$doc = file_get_contents($var["path"]);
$filename = basename($var["path"]);
$file = file_save_data($doc, 'public://'.$filename,FILE_EXISTS_REPLACE); 

以下内容对我不起作用:

$file->type = 'text/xml';
file_save($file);

提前致谢

【问题讨论】:

嗯...我认为这个功能是保存原始数据,所以你负责文件内容、标题、扩展名和其他东西。它不像通过http协议发送文件,您可以在其中设置文件头。 对!但是该函数在 drupal 中创建了一个托管文件。 api.drupal.org/api/drupal/includes!file.inc/function/… 说:“将文件保存到指定的目的地并创建一个数据库条目”所以我应该能够以某种方式设置文件类型。在管理/内容/文件管理页面中,类型设置为“未定义”。 所以 Drupal 知道该文件。但这与文件类型无关,还是我错了? 对不起,如果我不能清楚这一点。文件属性“tpye”在以编程方式创建时设置为未定义。我想知道为什么在使用 file_save_data nore 使用 file_save($file); 时无法设置文件类型; 【参考方案1】:

以这种方式强制类型时,字符串必须与文件类型的机器名称匹配(参见admin/structure/file-types 以查找可用的文件类型):

$file->type = 'document';

$file->type = 'video';

等等

话虽如此,当你不设置类型时,如果你安装了模块file_entity,它会自动设置为与文件的MIME类型匹配的第一个文件类型。

参考:

/**
* Implements hook_file_presave().
*/
function file_entity_file_presave($file) 
  // Always ensure the filemime property is current.
  if (!empty($file->original) || empty($file->filemime)) 
    $file->filemime = file_get_mimetype($file->uri);
  

  // The file type is used as a bundle key, and therefore, must not be NULL.
  // It defaults to FILE_TYPE_NONE when loaded via file_load(), but in case
  // file_save() is called on a new file object, default it here too.
  if (!isset($file->type)) 
    $file->type = FILE_TYPE_NONE;
  

  // If the file isn't already assigned a real type, determine what type should
  // be assigned to it.
  if ($file->type === FILE_TYPE_NONE) 
    $type = file_get_type($file);
    if (isset($type)) 
      $file->type = $type;
    
  

  field_attach_presave('file', $file);

  // Fetch image dimensions.
  file_entity_metadata_fetch_image_dimensions($file);

【讨论】:

以上是关于Drupal - file_save_data --> 设置类型的主要内容,如果未能解决你的问题,请参考以下文章

Drupal 9 | Drupal.org

Drupal 9 | Drupal.org

drupal blog 怎么显示

Drupal:drupal_set_message 不显示消息

Drupal:Drupal6 意见:过滤器限制

如何将自己做好的网站用drupal来进行内容管理