Drupal 7 如何在使用“文件”后将文件对象保存到字段;文件“U扫描”目录;

Drupal 7 如何在使用“文件”后将文件对象保存到字段;文件“U扫描”目录;,drupal-7,Drupal 7,我尝试使用file_scan_directory来扫描一些文件并获得一些本地路径,我希望它们成为一个对象并保存到数据库中,所以我需要file_save来实现这一点。 file_save以一个file对象作为参数,我怎么能假设这个过程成功呢 我尝试过文件保存上传,API文档提到参数“$source--一个指定要保存的上传文件的文件路径或URI的字符串”,但是它似乎不读取路径,并且总是返回null 我还尝试自定义创建一个file对象,以便file_save运行,它确实可以工作,但不认为它是以正确的d

我尝试使用file_scan_directory来扫描一些文件并获得一些本地路径,我希望它们成为一个对象并保存到数据库中,所以我需要file_save来实现这一点。 file_save以一个file对象作为参数,我怎么能假设这个过程成功呢

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

我还尝试自定义创建一个file对象,以便file_save运行,它确实可以工作,但不认为它是以正确的drupal方式运行的,是否有以下解决方案:

文件扫描目录->??->文件保存->字段附加更新(*保存文件后用新fid更新字段)


请帮忙,非常感谢

此代码段将扫描一些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";
  }
}

此代码段将扫描一些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";
  }
}