Firebase Summit에서 발표된 모든 내용을 살펴보고 Firebase로 앱을 빠르게 개발하고 안심하고 앱을 실행하는 방법을 알아보세요. 자세히 알아보기

C++용 Cloud Storage로 Cloud Storage 참조 만들기

컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

파일은 Cloud Storage 버킷에 저장됩니다. 이 버킷의 파일은 로컬 하드 디스크의 파일 시스템 또는 Firebase 실시간 데이터베이스의 데이터와 같은 계층 구조로 표시됩니다. 파일에 대한 참조를 생성하면 앱에서 파일에 대한 액세스 권한을 얻습니다. 그런 다음 이러한 참조를 사용하여 데이터를 업로드 또는 다운로드하고 메타데이터를 가져오거나 업데이트하거나 파일을 삭제할 수 있습니다. 참조는 특정 파일 또는 계층 구조의 상위 수준 노드를 가리킬 수 있습니다.

Firebase 실시간 데이터베이스 를 사용해 본 적이 있다면 이러한 경로가 매우 친숙하게 보일 것입니다. 그러나 파일 데이터는 실시간 데이터베이스가 아닌 Cloud Storage에 저장됩니다.

참조 만들기

파일을 업로드, 다운로드 또는 삭제하거나 해당 메타데이터를 가져오거나 업데이트하기 위한 참조를 만듭니다. 참조는 클라우드의 파일에 대한 포인터로 생각할 수 있습니다. 참조는 경량이므로 필요한 만큼 많이 만들 수 있습니다. 또한 여러 작업에 재사용할 수 있습니다.

참조는 GetReferenceFromUrl() 메서드를 호출하고 gs://<your-cloud-storage-bucket> 형식의 URL을 전달하여 Firebase 앱의 storage 서비스에서 생성됩니다. Firebase 콘솔저장소 섹션에서 이 URL을 찾을 수 있습니다.

// Get a reference to the storage service, using the default Firebase App
Storage* storage = Storage::GetInstance(app);

// Create a Cloud Storage reference from our storage service
StorageReference storage_ref = storage->GetReferenceFromUrl("gs://<your-cloud-storage-bucket>");

기존 참조에 child 메서드를 사용하여 'images/space.jpg' 와 같이 트리의 하위 위치에 대한 참조를 만들 수 있습니다.

// Create a child reference
// images_ref now points to "images"
StorageReference images_ref = storage_ref.Child("images");

// Child references can also take paths delimited by '/'
// space_ref now points to "images/space.jpg"
// images_ref still points to "images"
StorageReference space_ref = storage_ref.Child("images/space.jpg");

// This is equivalent to creating the full reference
StorageReference space_ref = storage.GetReferenceFromUrl("gs://<your-cloud-storage-bucket>/images/space.jpg");

또한 ParentRoot 메서드를 사용하여 파일 계층에서 위로 탐색할 수 있습니다. Parent 는 한 수준 위로 이동하고 Root 는 맨 위로 이동합니다.

// Parent allows us to move to the parent of a reference
// images_ref now points to 'images'
StorageReference images_ref = space_ref.Parent();

// Root allows us to move all the way back to the top of our bucket
// root_ref now points to the root
StorageReference root_ref = space_ref.Root();

Child , ParentRoot 는 각각 참조를 반환하므로 여러 번 함께 연결할 수 있습니다. 예외는 잘못된 StorageReferenceRootParent 입니다.

// References can be chained together multiple times
// earth_ref points to "images/earth.jpg"
StorageReference earth_ref = space_ref.Parent().Child("earth.jpg");

// null_ref is null, since the parent of root is an invalid StorageReference
StorageReference null_ref = space_ref.Root().Parent();

참조 방법

full_path , namebucket 메서드를 사용하여 참조가 가리키는 파일을 더 잘 이해하기 위해 참조를 검사할 수 있습니다. 이러한 메서드는 파일의 전체 경로, 이름 및 버킷을 가져옵니다.

// Reference's path is: "images/space.jpg"
// This is analogous to a file path on disk
space_ref.full_path();

// Reference's name is the last segment of the full path: "space.jpg"
// This is analogous to the file name
space_ref.name();

// Reference's bucket is the name of the Cloud Storage bucket where files are stored
space_ref.bucket();

참조에 대한 제한

참조 경로 및 이름에는 유효한 유니코드 문자 시퀀스가 ​​포함될 수 있지만 다음과 같은 특정 제한 사항이 적용됩니다.

  1. reference.fullPath의 총 길이는 UTF-8 인코딩 시 1~1024바이트여야 합니다.
  2. 캐리지 리턴 또는 라인 피드 문자가 없습니다.
  3. # , [ , ] , * 또는 ? 사용을 피하십시오. , Firebase 실시간 데이터베이스 또는 gsutil 과 같은 다른 도구와 잘 작동하지 않기 때문입니다.

전체 예

Storage* storage = Storage::GetInstance(app);

// Points to the root reference
StorageReference storage_ref = storage->GetReferenceFromUrl("gs://<your-bucket-name>");

// Points to "images"
StorageReference images_ref = storage_ref.Child("images");

// Points to "images/space.jpg"
// Note that you can use variables to create child values
std::string filename = "space.jpg";
StorageReference space_ref = images_ref.Child(filename);

// File path is "images/space.jpg"
std::string path = space_ref.full_path()

// File name is "space.jpg"
std::string name = space_ref.name()

// Points to "images"
StorageReference images_ref = space_ref.Parent();

다음 단계

다음으로 Cloud Storage에 파일을 업로드 하는 방법을 알아보겠습니다.