Как сохранить файловый объект в поле после использования «file_scan_directory»

#drupal-7

#drupal-7

Вопрос:

Я пытаюсь использовать file_scan_directory для сканирования некоторых файлов и получения некоторого локального пути, и я хочу, чтобы они стали объектом и сохранялись в БД, поэтому для этого мне нужно file_save. file_save принимает объект file в качестве параметра, и как я могу предположить, чтобы успешно выполнить эту процедуру?

Я попробовал file_save_upload, в документе API упоминается параметр «$source — Строка, указывающая путь к файлу или URI загруженного файла для сохранения.», Однако, похоже, он не читает путь и всегда возвращает null.

Я также пытаюсь создать файловый объект для запуска file_save, он работает, но не думаю, что это правильно для drupal, будет ли какое-либо решение для:

file_scan_directory-> ???? -> file_save -> field_attach_update (* обновите поле новым идентификатором после сохранения файла)

пожалуйста, помогите за это, большое вам спасибо!

Ответ №1:

Этот фрагмент будет сканировать некоторые файлы jpg, сохранять в БД и прикреплять файлы к полю.

 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";
  }
}