fid를 기반으로 파일의 절대 경로를 얻는 방법


13

fid를 기반으로 파일의 절대 경로를 어떻게 얻을 수 있습니까? 이것이 반복되는 경우 죄송합니다. 검색을했지만 답변을 찾을 수 없습니다.


$ base_url + 파일의 나머지 경로 + uri를 사용하여 얻는 방법을 알아 냈을 수도 있습니다. 이것이 최선의 방법입니까?
Russ

답변:


35

드루팔 7

이것은, 두 부분의 과정 사용 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
경로를 얻기 위해 파일을로드해야한다는 것에 놀랐습니다. 자원 낭비처럼 보입니다.
Russ

2
@Russ 파일 자체가 아닌 파일 객체를로드합니다. uri를 얻기 위해 db_query를 수행 할 수도 있지만 가능한 한 API를 사용하려고합니다.
mpdonadio

고마워, 나는 한 걸음에 그것을 돌려 줄 수있는 깨끗한 기능이 있다고 생각했습니다. drupal 8에서 고려할만한 것이있을 것입니다.
Russ

1
귀하의 예에는 'field_load ($ fid)'가 있으며 'file_load ($ fid)'여야합니다.
Steve Mulvihill

2
@SteveMulvihill 와우, 좋은 캐치. 4 년 이상 33 표 득표 한 사람은 없었습니다.
mpdonadio

3

Drupal 7에서는 파일의 모든 필드를로드하지 않으려는 경우 MYSQL 쿼리를 사용할 수도 있습니다

  $ fid = 1; // 파일 ID
  $ uri = db_select ( 'file_managed', 'f')
    -> 조건 ( 'f.fid', $ fid, '=')
    -> 필드 ( 'f', 배열 ( 'uri'))
    -> execute ()-> fetchField ();
  에코 파일 _create_url ($ uri);

3

드루팔 8

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

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.