Cómo leer y escribir en Google Cloud Storage

En este documento se describe cómo almacenar y recuperar datos con Cloud Storage en una aplicación de App Engine con la biblioteca cliente de Google Cloud Storage. Se supone que realizaste las tareas que se describen en Configuración de Google Cloud Storage para activar un depósito de Cloud Storage y descargar las bibliotecas cliente. También se supone que sabes cómo compilar una aplicación de App Engine, según se describe en la Guía de inicio rápido del entorno estándar de App Engine en Java.

Importaciones requeridas

En el siguiente fragmento se muestran las importaciones que necesitas para el acceso a Cloud Storage a través de la biblioteca cliente:

import com.google.appengine.tools.cloudstorage.GcsFileOptions;
import com.google.appengine.tools.cloudstorage.GcsFilename;
import com.google.appengine.tools.cloudstorage.GcsInputChannel;
import com.google.appengine.tools.cloudstorage.GcsOutputChannel;
import com.google.appengine.tools.cloudstorage.GcsService;
import com.google.appengine.tools.cloudstorage.GcsServiceFactory;
import com.google.appengine.tools.cloudstorage.RetryParams;

Cómo especificar el depósito de Cloud Storage

En el siguiente fragmento se muestra una forma para permitir que el usuario especifique un nombre del depósito cuando escribe un archivo en un depósito:

function uploadFile() {
  var bucket = document.forms["putFile"]["bucket"].value;
  var filename = document.forms["putFile"]["fileName"].value;
  if (bucket == null || bucket == "" || filename == null || filename == "") {
    alert("Both Bucket and FileName are required");
    return false;
  } else {
    var postData = document.forms["putFile"]["content"].value;
    document.getElementById("content").value = null;

    var request = new XMLHttpRequest();
    request.open("POST", "/gcs/" + bucket + "/" + filename, false);
    request.setRequestHeader("Content-Type", "text/plain;charset=UTF-8");
    request.send(postData);
  }
}

El fragmento antecede al /gcs/ requerido para el depósito y nombre del archivo que proporcionó el usuario.

Cómo escribir en Cloud Storage

Para escribir un archivo en Cloud Storage:

@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
  GcsFileOptions instance = GcsFileOptions.getDefaultInstance();
  GcsFilename fileName = getFileName(req);
  GcsOutputChannel outputChannel;
  outputChannel = gcsService.createOrReplace(fileName, instance);
  copy(req.getInputStream(), Channels.newOutputStream(outputChannel));
}

En este ejemplo se escribe un archivo nuevo en Cloud Storage o, si ya existe un archivo con el mismo nombre, se lo reemplaza. Esto resulta útil porque una vez que escribes un archivo en Cloud Storage, no puedes modificarlo. Para cambiar el archivo, debes realizar las modificaciones en una copia del archivo y, luego, reemplazar el archivo anterior.

Cómo leer desde Cloud Storage

Para leer un archivo desde Cloud Storage:

@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
  GcsFilename fileName = getFileName(req);
  if (SERVE_USING_BLOBSTORE_API) {
    BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
    BlobKey blobKey = blobstoreService.createGsBlobKey(
        "/gs/" + fileName.getBucketName() + "/" + fileName.getObjectName());
    blobstoreService.serve(blobKey, resp);
  } else {
    GcsInputChannel readChannel = gcsService.openPrefetchingReadChannel(fileName, 0, BUFFER_SIZE);
    copy(Channels.newInputStream(readChannel), resp.getOutputStream());
  }
}

En la línea que contiene gcsService.openPrefetchingReadChannel, ten en cuenta el uso de recuperación previa. Esto almacena los datos en la memoria y los recupera antes de que se requieran para evitar el bloqueo de la llamada de lectura.

Pasos siguientes

¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…

Entorno estándar de App Engine para Java