如何将文件 uri 转换为 drupal8 中的相对路径
How can I convert a file uri to relative path in drupal8
我正在尝试找到将 uri 转换为
的方法
public://field/image/link-carousel.png
相对路径
sites/default/files/directory/link-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
会得到 public://field/image/link-caribbean-carousel-epic-press-release。png.on 打印 $realpath
会得到一个空白页。
使用 FileSystem::realpath() 从 sream-wrapped URIs 转换:
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);
摘自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));
/** @var Drupal\file\Entity\File $file */
$file = // get file.
$file->createFileUrl(TRUE); // to get relative path
$file->createFileUrl(FALSE); // to get absolute path https://
我正在尝试找到将 uri 转换为
的方法public://field/image/link-carousel.png
相对路径
sites/default/files/directory/link-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
会得到 public://field/image/link-caribbean-carousel-epic-press-release。png.on 打印 $realpath
会得到一个空白页。
使用 FileSystem::realpath() 从 sream-wrapped URIs 转换:
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);
摘自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));
/** @var Drupal\file\Entity\File $file */
$file = // get file.
$file->createFileUrl(TRUE); // to get relative path
$file->createFileUrl(FALSE); // to get absolute path https://