保存节点用的FileField(Saving nodes with a filefield)

2019-09-02 04:29发布

我是在创造一个Drupal站点批量上传功能的进度。 使用闪光灯,我能够把文件上传到指定网址,然后处理这些文件。 我想要做什么,是不是只是上传的文件,而是创建一个特定的类型与保存到已经创建了一个CCK FileField或文件的一个节点。 由于这些文件是音频文件,这一点很重要的FileField处理文件,因此除了元数据可以提供与getid3模块。

现在,我已经通过一些代码看起来我没能找到一个API文档,但目前还不清楚在所有我应该如何处理这个问题。 理想情况下我可以只通过该文件的功能,只需使用保存节点时,返回的数据,但我一直没能找到该功能。

如果任何人有经验,这我会apreciate对如何处理这件事情的一些指针。

Answer 1:

我不得不做类似的东西几个星期前,结束了适应从一些功能远程文件模块 ,尤其是remote_file_cck_attach_file()函数。 它使用field_file_save_file()从FileField或模块,它可能是你正在寻找的功能作用。

在我的情况下,将文件从多个远程地点获取并存储临时使用file_save_data() 它们连接到一个CCK的FileField上发生的hook_nodeapi() presave,使用下列内容:

public static function attachAsCCKField(&$node, $filepath, $fieldname, $index=0) {
  // Grab the filefield definition
  $field = content_fields($fieldname, $node->type);
  $validators = array_merge(filefield_widget_upload_validators($field), imagefield_widget_upload_validators($field));
  $fieldFileDirectory = filefield_widget_file_path($field);
  // This path does not necessarily exist already, so make sure it is available
  self::verifyPath($fieldFileDirectory);
  $file = field_file_save_file($filepath, $validators, $fieldFileDirectory);
  // Is the CCK field array already available in the node object?
  if (!is_array($node->$fieldname)) {
    // No, add a stub
    $node->$fieldname=array();
  }
  $node->{$fieldname}[$index] = $file;
}

$filepath是路径到应当安装该文件, $fieldname是FileField或实例的内部名称给节点和内使用$index将是在多个字段中的条目的情况下,附加文件的0的索引。

该函数结束了一个工具类中,故名为verifyPath()调用的类语法。 呼叫只是确保目标目录中可用:

public static function verifyPath($path) {
  if (!file_check_directory($path, FILE_CREATE_DIRECTORY)) {
    throw new RuntimeException('The path "' . $path . '" is not valid (not creatable, not writeable?).');
  }
}

这为我做 - 一切发生在节点自动保存。

我没有使用过getid3模块,所以我不知道它是否会一起做的这种方式打球。 另外,我根本不需要添加额外的信息/属性中的FileField,所以也许你不得不把一些信息到现场阵列不仅仅是通过返回的文件field_file_save_file() 不管怎么说,希望这有助于和好运。



Answer 2:

我已经做了蒙山的ImageField这工作,我觉得结构必须是正确的,否则将无法正常工作。 我花了很多的试验和错误。 这是我填入的ImageField。

$image['data'] =array(
            'title' => $media_reference_attributes->getNamedItem("source")->value,
            'description' => $description,
            'alt' => "",);
$image['width'] = $width;
$image['height'] = $height;
$image['mimetype'] = $mime_type
$image['uid'] = 1;
$image['status'] = 1;
$image['fid'] = $fid;
$image['filesize'] = $file->filesize;
$image['nid'] = $id;
$image['filename'] = $url;
$image['timestamp'] = $file->timestamp;
$image['filepath'] = $file_path;

希望这个对你有帮助。



Answer 3:

你可能想看看图片FUpload如果你需要看一下整合Flash上传。

为了推动文件到另一个服务器,同时还处理他们通过Drupal的听起来有点像CDN的空间,也许看在行为CDN或CDN2项目?

如果你找到一个澄清的溶液请回来,并张贴!



文章来源: Saving nodes with a filefield