fidに基づいてファイルの絶対パスを取得する方法


13

FIDに基づいてファイルの絶対パスを取得するにはどうすればよいですか?これが繰り返しの場合は申し訳ありませんが、検索を行いましたが、答えが見つかりませんでした。


$ base_url +ファイルへの残りのパス+ uriを使用して取得する方法を見つけたかもしれませんが、これが最良の方法ですか?
ラス14

回答:


35

Drupal 7

これは2つの部分からなるプロセスでfile_load()あり、file_create_url()

最初に、$ fidをDrupal URIに変換する必要があります。

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

これで、これをURLに変えることができます

$url = file_create_url($uri);

file_create_url()$base_path定義したグローバルを使用するか、Drupalがブートストラップ中に推測したグローバルを使用して、常に絶対URLを作成します。


1
パスを取得するためだけにファイルをロードしなければならないことに驚いています。リソースの無駄のようです。
ラス14

2
@Russファイル自体ではなく、ファイルオブジェクトを読み込んでいます。uriを取得するためにdb_queryを実行することもできますが、できるだけAPIを使用するようにします。
mpdonadio

おかげで、1ステップでそれを返すことができるきれいな関数があると思っただけです。たぶんDrupalの8に考慮すべき何か
ラス

1
この例では、「field_load($ fid)」があり、「file_load($ fid)」である必要があります。
スティーブMulvihill

2
@SteveMulvihillうわー、いいキャッチ。4年以上33票、誰もそれに気づきませんでした。
mpdonadio

3

Drupal 7では、ファイルのすべてのフィールドをロードしたくない場合、MYSQLクエリも使用できます。

  $ fid = 1; //ファイルID
  $ uri = db_select( 'file_managed'、 'f')
    -> condition( 'f.fid'、$ fid、 '=')
    -> fields( 'f'、array( 'uri'))
    -> execute()-> fetchField();
  echo 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();
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.