获取文件的真实路径


11

我正在Drupal 8中创建一个Excel读取模块。我想获取文件的真实路径,以便从诸如public://2016-03/Places.xls之类的路径读取文件。

我应该调用什么函数来获取文件的真实路径?



4
为了阅读用什么?该路径几乎适用于所有内容,例如file_get_contents('public:// ...')可以正常工作。
贝尔迪尔

1
我得到的答案Drupal的8方面,它是`\的Drupal ::服务( '的file_system') - >真实路径( '公众://2016-03/Places_2.xlsx')`
Nisam

1
将其作为响应发布并接受作为解决方案。这将帮助其他有同样问题的人。
Aram Boyajyan

1
我也有类似情况,但是最终使用file_create_url,因为它可以处理managed files (These are files that have either been uploaded by users or were generated automatically (for example through CSS aggregation))shipped files (those outside of the files directory, which ship as part of Drupal core or contributed modules or themes)
usernameabc

Answers:


16

最后,我通过挖掘Drupal代码获得了解决方案。
我们可以使用file_system服务获取真实路径或绝对路径。

$absolute_path = \Drupal::service('file_system')->realpath('public://2016-03/Places_2.xlsx');

4
这些是通过Drupal上传文件的?如果它们在外部托管,会发生什么? The use of this method is discouraged, because it does not work for remote URIs. Except in rare cases, URIs should not be manually resolved.提到FileSystem :: realpath
用户名

13

@Nisam的回答是正确的,但现在已弃用:函数drupal_realpath

不推荐使用

在Drupal 8.0.x-dev中,将在Drupal 9.0.0之前删除。使用\ Drupal \ Core \ File \ FileSystem :: realpath()。

因此,您应该使用FileSystem :: realpath

例:

$file = File::load($file_id);
$uri = $file->getFileUri();
$stream_wrapper_manager = \Drupal::service('stream_wrapper_manager')->getViaUri($uri);
$file_path = $stream_wrapper_manager->realpath();
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.