Como ler e gravar no Google Cloud Storage

Neste documento, descrevemos como armazenar e recuperar dados usando o Cloud Storage em um aplicativo do App Engine com a biblioteca de cliente do Google Cloud Storage. O ideal é que você já tenha concluído as tarefas descritas na seção Como configurar o Google Cloud Storage para ativar um intervalo do Cloud Storage e fazer o download das bibliotecas de cliente. Também é necessário que você saiba criar um aplicativo do App Engine, conforme descrito em Guia de início rápido para o ambiente padrão do Java App Engine.

Importações obrigatórias

O seguinte snippet mostra as importações de que você precisa para o acesso ao Cloud Storage por meio da biblioteca de 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;

Como especificar o intervalo do Cloud Storage

O seguinte snippet mostra uma maneira de permitir que o usuário especifique um nome de intervalo ao gravar um arquivo em um intervalo:

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

O snippet pré-anexa o /gcs/ obrigatório ao intervalo e ao nome do arquivo fornecidos pelo usuário.

Como gravar no Cloud Storage

Para gravar um arquivo no 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));
}

Esta amostra grava um novo arquivo no Cloud Storage ou, caso um arquivo com o mesmo nome já exista, ele o substitui. Isso é útil porque, depois de gravar um arquivo no Cloud Storage, você não poderá modificá-lo. Para alterar o arquivo, você precisa fazer as modificações em uma cópia do arquivo e substituir o arquivo anterior.

Como fazer a leitura do Cloud Storage

Para ler um arquivo do 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());
  }
}

Na linha que contém gcsService.openPrefetchingReadChannel, observe o uso da pré-busca. Isso armazena em buffer dados na memória e faz uma pré-busca antes de ser obrigatório para evitar o bloqueio na chamada de leitura.

Próximas etapas

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Ambiente padrão do App Engine para Java