Как сохранить объект файла в поле после использования "file_scan_directory" - PullRequest
1 голос
/ 26 октября 2011

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

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

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

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

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

1 Ответ

1 голос
/ 13 февраля 2012

Этот фрагмент отсканирует некоторые файлы 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";
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...