使用“file_scan_directory”后如何将文件对象保存到字段

时间:2011-10-26 02:28:42

标签: drupal-7

我尝试使用file_scan_directory扫描一些文件并获取一些本地路径,我希望它们成为一个对象并保存到db中,所以我需要file_save这样做。 file_save将文件对象作为参数,我怎么能想这个程序成功?

我已经尝试了file_save_upload,API doc提到了参数“$ source ---一个指定要保存的上传文件的文件路径或URI的字符串。”但是它似乎没有读取路径并且总是返回null。

我也尝试自定义为file_save创建一个文件对象来运行,它确实有效,但不认为它是正确的drupal方式,是否有任何解决方案:

file_scan_directory-> ???? - > file_save - > field_attach_update(*保存文件后用新的fid更新字段)

请为此提供帮助,非常感谢!

1 个答案:

答案 0 :(得分:1)

此代码段将扫描一些jpg文件,保存到db中,并将文件附加到字段中。

function test_form(){
  $node = node_load('61');
  unset($node->field_image[$node->language]);

  $files = file_scan_directory('public://testimport', '/^.*\.(jpg|JPG)$/');

  //dpm($files);

  //http://drupal.org/node/889058
  foreach($files as $fileobj){

    $query = new EntityFieldQuery;
    $result = $query
      ->entityCondition('entity_type', 'file')
      ->propertyCondition('uri', $fileobj->uri)
      //$query->propertyCondition('uri', 'public://%', 'LIKE');
      ->execute();

    if(isset($result['file'])){
      dpm($result['file']);
      $fid = reset($result['file'])->fid;
      $fileobj = file_load($fid);
    }else{
      $fileobj->filemine = file_get_mimetype($fileobj->uri);
      $fileobj = file_save($fileobj);
    }

    $node->field_image[$node->language][] = array(
      'fid' => $fileobj->fid,
      //'alt' => $node->title,
      //'title' => $node->title,
      'uid' => '1',
      'filename' => $fileobj->filename,
      'uri' => $fileobj->uri,
      'filemime' => $fileobj->filemime,
      'filesize'=> $fileobj->filesize,
      'status' => '1',
    );

  }

  if($node = node_submit($node)) { // Prepare node for saving
    node_save($node);
    echo "Node with nid " . $node->nid . " updated!\n";
  }
}