如何将许多现有文件与drupal filefield关联?

如何将许多现有文件与drupal filefield关联?,drupal,drupal-6,Drupal,Drupal 6,我已经从一个静态网站在我的服务器上存储了很多mp3文件,现在我们正在迁移到drupal。我将为每个音频文件创建一个节点,但我不想再次上传每个文件。我宁愿将文件复制到我想要的drupal文件目录中,然后将节点与适当的文件关联 关于如何实现这一点有什么想法吗 谢谢 不能完全满足您的要求(它创建节点附件而不是节点),但是,将该模块与Drapal API一起作为指导来做您想做的事情相对简单。我不确定我是否要提出一种不同的方法,或者我是否要用不同的词来说明您对原始问题的意思,但由于您希望节点成为文件,我宁

我已经从一个静态网站在我的服务器上存储了很多mp3文件,现在我们正在迁移到drupal。我将为每个音频文件创建一个节点,但我不想再次上传每个文件。我宁愿将文件复制到我想要的drupal文件目录中,然后将节点与适当的文件关联

关于如何实现这一点有什么想法吗


谢谢

不能完全满足您的要求(它创建节点附件而不是节点),但是,将该模块与Drapal API一起作为指导来做您想做的事情相对简单。

我不确定我是否要提出一种不同的方法,或者我是否要用不同的词来说明您对原始问题的意思,但由于您希望节点成为文件,我宁愿从文件开始生成节点,而不是将现有节点与现有文件关联

一般来说,我会以编程的方式进行:对于导入目录中的每个现有文件,我会构建
$node
对象,然后调用
node\u save($node)
将其存储在Drupal中

当然,在构建
$node
对象时,需要调用用于管理文件的模块的API函数。下面是我为完成类似任务而编写的一些示例代码。在这个场景中,我将产品表附加到产品(带有附加字段的节点),所以

  • 字段\工作表
    是产品节点中产品工作表的CCK字段
  • product
    是节点类型
  • $sheet_file
    是产品图纸文件的完整引用(路径+文件名)
例如:

// Load the CCK field
$field = content_fields('field_sheet', 'product');
// Load the appropriate validators
$validators = array_merge(filefield_widget_upload_validators($field));
// Where do we store the files?
$files_path = filefield_widget_file_path($field);
// Create the file object
$file = field_file_save_file($sheet_file, $validators, $files_path);
// Apply the file to the field, this sets the first file only, could be looped
// if there were more files
$node->field_scheda = array(0 => $file);
// The file has been copied in the appropriate directory, so it can be
// removed from the import directory
unlink($sheet_file);
顺便说一句:如果你使用一个库来读取MP3元数据,你可以合理地设置$node->title和其他属性


希望这有帮助

在上面的例子中,$sheet_file是什么?浏览api后,看起来$sheet_file是指向文件源的一个字符串路径。无论如何,在这个过程中为每个文件创建一个节点是一个好主意。然而,如果节点有几个字段等,这可能是实际的痛点。我明白你的意思,我想:迭代我目录中的每个音频文件,并为每个文件创建一个节点,使用文件名(或id3数据,到你的位置)来填充关于节点的信息。我假设,因为我需要使用drupal节点api,所以我会编写一个自定义模块来实现这一点——对吗?谢谢你的帮助@谷歌-你比我快。。。但是我更新了这个例子,为它的开发环境提供了更多的参考。感谢您指出这一点。@Idweeks-是的,您必须编写一个简单的模块来实现这一点。当然,您应该首先使用CCK设置节点类型(例如,一个名为“song”的节点)(您也可以通过编程方式定义节点类型,但它更复杂)。还要注意对文件字段使用适当验证器的调用:这意味着在设置节点时,必须明确允许将要使用的文件格式作为文件格式(例如:ogg、oga、mp3),否则导入将失败。