Usa Cloud Storage

Puedes usar Cloud Storage para almacenar y entregar archivos tal como películas, imágenes y otros contenidos estáticos.

En este documento se describe cómo utilizar la biblioteca cliente de Google Cloud en tu app para almacenar y recuperar datos de Cloud Storage.

Antes de comenzar

  • Sigue las instrucciones en “Hello, World!” para Java en App Engine a fin de configurar tu entorno y proyecto, y comprender cómo se estructuran las apps de Java en App Engine. Anota y guarda el ID del proyecto, ya que lo necesitarás para ejecutar la aplicación de muestra que se describe en este documento.

  • Asegúrate de crear un bucket de Cloud Storage para tu aplicación con este comando:

    gsutil mb gs://[YOUR_BUCKET_NAME]
    
  • Haz que el bucket pueda leerse públicamente para que pueda entregar archivos:

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

Descarga la muestra

Para clonar el repositorio:

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

Instala dependencias y edita la configuración del proyecto

En app.yaml, configura BUCKET_NAME en el bucket de Cloud Storage que creaste para tu proyecto.

runtime: java
env: flex

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

env_variables:
  BUCKET_NAME: YOUR-BUCKET-NAME

En pom.xml, configura com.google.cloud como una dependencia y especifica google-cloud-storage como el artifactID para esa dependencia; esto proporciona las funciones a fin de usar 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>

Código de la aplicación

La misma aplicación presenta una página web en la que se pide al usuario que proporcione un archivo para almacenar en Cloud Storage. Cuando el usuario selecciona un archivo y hace clic en enviar, el controlador de solicitudes doPost escribe el archivo en el bucket de Cloud Storage mediante Storage.create.

Ten en cuenta que, para recuperar este archivo de Cloud Storage, tendrás que especificar el nombre del bucket y el del archivo. Almacena estos valores en tu app para poder usarlos más adelante.

@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());
  }
}

Para obtener más información

Para obtener más información sobre Cloud Storage, consulta la documentación de Cloud Storage.