Cloud Storage 사용

Cloud Storage를 사용하여 영화, 이미지 또는 기타 정적 콘텐츠와 같은 파일을 저장하고 제공할 수 있습니다.

이 문서는 앱에서 Google Cloud 클라이언트 라이브러리를 사용하여 Cloud Storage에 데이터를 저장하고 검색하는 방법을 설명합니다.

시작하기 전에

  • App Engine의 자바용 'Hello, World!'의 안내에 따라 환경과 프로젝트를 설정하고 App Engine에서 자바 앱이 구조화되는 방식을 이해합니다. 이 문서에 설명된 샘플 애플리케이션을 실행할 때 필요하므로 프로젝트 ID를 기록해 둡니다.

  • 다음 명령어를 호출하여 애플리케이션용 Cloud Storage 버킷을 만듭니다.

    gsutil mb gs://[YOUR_BUCKET_NAME]
    
  • 공개 읽기 가능 버킷으로 만들어 파일을 제공할 수 있도록 합니다.

    gsutil defacl set public-read gs://[YOUR_BUCKET_NAME]
    

샘플 다운로드

저장소를 복제하려면 다음을 사용하세요.

git clone https://github.com/GoogleCloudPlatform/java-docs-samples
cd java-docs-samples/flexible/cloudstorage

프로젝트 구성 수정 및 종속 항목 설치

app.yaml에서 이전에 BUCKET_NAME을 프로젝트용으로 만든 Cloud Storage로 설정합니다.

runtime: java
env: flex

handlers:
- url: /.*
  script: this field is required, but ignored

env_variables:
  BUCKET_NAME: YOUR-BUCKET-NAME

pom.xml에서 com.google.cloud를 종속 항목으로 설정하고 google-cloud-storage를 해당 종속 항목의 artifactID로 지정합니다. 이 종속 항목은 Cloud Storage를 사용하기 위한 함수를 제공합니다.

<!--  Using libraries-bom to manage versions.
See https://github.com/GoogleCloudPlatform/cloud-opensource-java/wiki/The-Google-Cloud-Platform-Libraries-BOM -->
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>com.google.cloud</groupId>
      <artifactId>libraries-bom</artifactId>
      <version>25.0.0</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

<dependencies>
  <dependency>
    <groupId>com.google.cloud</groupId>
    <artifactId>google-cloud-storage</artifactId>
  </dependency>
</dependencies>

애플리케이션 코드

샘플 애플리케이션은 웹페이지를 통해 사용자에게 Cloud Storage에 저장할 파일을 제공하라는 메시지를 표시합니다. 사용자가 파일을 선택하고 제출을 클릭하면 doPost 요청 핸들러가 Storage.create를 사용하여 파일을 Cloud Storage 버킷에 파일을 작성합니다.다.

Cloud Storage에서 이 파일을 검색하려면 버킷 이름과 파일 이름을 지정해야 합니다. 나중에 사용할 수 있도록 이 값을 앱에 저장해야 합니다.

@SuppressWarnings("serial")
@WebServlet(name = "upload", value = "/upload")
@MultipartConfig()
public class UploadServlet extends HttpServlet {

  private static final String BUCKET_NAME = System.getenv("BUCKET_NAME");
  private static Storage storage = null;

  @Override
  public void init() {
    storage = StorageOptions.getDefaultInstance().getService();
  }

  @Override
  public void doPost(HttpServletRequest req, HttpServletResponse resp)
      throws IOException, ServletException {
    final Part filePart = req.getPart("file");
    final String fileName = filePart.getSubmittedFileName();

    // Modify access list to allow all users with link to read file
    List<Acl> acls = new ArrayList<>();
    acls.add(Acl.of(Acl.User.ofAllUsers(), Acl.Role.READER));
    // the inputstream is closed by default, so we don't need to close it here
    Blob blob =
        storage.create(
            BlobInfo.newBuilder(BUCKET_NAME, fileName).setAcl(acls).build(),
            filePart.getInputStream());

    // return the public download link
    resp.getWriter().print(blob.getMediaLink());
  }
}

추가 정보

Cloud Storage에 대한 자세한 내용은 Cloud Storage 문서를 참조하세요.