如何获取基于fid的文件的绝对路径


13

如何获取基于FID的文件的绝对路径?抱歉,如果这是重复的话,我进行了搜索,但找不到答案。


我可能已经想出一种方法,可以使用$ base_url +剩余的文件路径+ uri来获取它,这是最好的方法吗?
罗斯2014年

Answers:


35

Drupal 7

这是一个分为两部分的过程,使用file_load()file_create_url()

首先,您需要将$ fid转换为Drupal URI:

$file = file_load($fid);
$uri = $file->uri;

现在,您可以将其转换为网址

$url = file_create_url($uri);

file_create_url()总是使用$base_path您定义的全局名称或使用Drupal在引导过程中猜测的全局名称来创建绝对URL 。


1
我很惊讶您必须加载文件才能获取路径,似乎浪费资源。
2014年

2
@Russ它正在加载文件对象,而不是文件本身。您也可以执行db_query来获取uri,但是我尝试尽可能多地使用API​​。
mpdonadio

谢谢,我认为,只是想有一个干净的函数可以一步就将其返回。也许在drupal 8中需要考虑一些问题。–
Russ

1
在您的示例中,您具有“ field_load($ fid)”,应为“ file_load($ fid)”。
史蒂夫·马尔维希尔

2
@SteveMulvihill哇,真不错。四年+ 33票,没有人注意到。
mpdonadio

4

Drupal 8

$file = \Drupal\file\Entity\File::load($file_id);
$uri = $file->getFileUri();
$url = \Drupal\Core\Url::fromUri(file_create_url($uri))->toString();

3

在Drupal 7中,如果您不想加载文件的所有字段,则还可以使用MYSQL查询

  $ fid = 1; //您的文件ID
  $ uri = db_select('file_managed','f')
    ->条件('f.fid',$ fid,'=')
    ->字段('f',数组('uri'))
    -> execute()-> fetchField();
  回声file_create_url($ uri);

1

这些都在Drupal 8中为我工作:

// top of file
use Drupal\file\Entity\File;
use Drupal\Core\Url;

// load the file object from some file id
$file_object = File::load(123);

// way 1
$file_uri = $file_object->uri->value;
$file_url = file_create_url($file_uri);

// way 2
$file_uri = $file_object->getFileUri();
$file_url = Url::fromUri(file_create_url($file_uri))->toString();
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.