如何在drupal8中将文件uri转换为相对路径

时间:2017-12-14 10:55:15

标签: php drupal-8

我试图找到转换uri的方式

  

公共://field/image/link-carousel.png

到相对路径

  

站点/默认/文件/目录/链路carousel.png

(当然这是一个例子,因为public://可能有其他路径)。

怎么做?

代码:

 if(isset($article_node['field_image']['und']['n0'])){  
      $uri = $article_node['field_image']['und']['n0']['uri'];
      $realpath = \Drupal::service('file_system')->realpath($uri);
      $path = str_replace($_SERVER['DOCUMENT_ROOT'] . '/', '', $realpath);   
}

此处打印$uri将公开://field/image/link-caribbean-carousel-epic-press-release.png.on打印$realpath它会显示空白页。

2 个答案:

答案 0 :(得分:1)

取自https://gist.github.com/illepic/fa451e49c5c43b4a1742333f109dbfcd

// public://images/blah.jpg
$drupal_file_uri = File::load($fid)->getFileUri();
// /sites/default/files/images/blah.jpg
$image_path = file_url_transform_relative(file_create_url($drupal_file_uri));

答案 1 :(得分:-1)

使用FileSystem::realpath()转换来自sream包装的URI:

use Drupal\Core\File\FileSystem;

//$realpath = drupal_realpath($uri); // D7, D8 deprecated
$realpath = FileSystem::realpath($uri);
$path = str_replace($_SERVER['DOCUMENT_ROOT'].'/','',$realpath);

UPD:由于某种原因上面的例子无效,我们需要使用file_system服务:

  $uri = $node->field_document->entity->getFileUri();
  $realpath = \Drupal::service('file_system')->realpath($uri);
  $path = str_replace($_SERVER['DOCUMENT_ROOT'] . '/', '', $realpath);