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 --> 设置类型的主要内容,如果未能解决你的问题,请参考以下文章