Como usar o Cloud Storage com Java

Nesta parte do tutorial do Bookshelf para Java, você aprenderá como armazenar imagens no Google Cloud Storage.

Esta página faz parte de um tutorial com várias páginas. Para começar do início e ver as instruções de configuração, acesse App Bookshelf em Java.

Como criar um intervalo do Google Cloud Storage

Veja nas instruções a seguir como criar um intervalo do Cloud Storage. Intervalos são os contêineres básicos que armazenam seus dados no Cloud Storage.

Para criar um intervalo:

  1. Chame o seguinte comando em uma janela de terminal:

    gsutil mb gs://[YOUR-BUCKET-NAME]

  2. Configure a Access Control List padrão do intervalo como public-read para que os usuários vejam as imagens que eles enviaram:

    gsutil defacl set public-read gs://[YOUR-BUCKET-NAME]

Como definir configurações

Como executar o aplicativo na máquina local

Para executar o app localmente:

  1. No diretório getting-started-java/bookshelf/3-binary-data, digite este comando para começar um servidor local da Web:

    mvn -Plocal clean jetty:run-exploded -DprojectID=[YOUR-PROJECT-ID]
  2. No seu navegador, acesse http://localhost:8080.

Agora você pode navegar nas páginas da Web do app, adicionar livros com imagens de capa, editá-los e exclui-los.

Como implantar o app no ambiente flexível do App Engine

  1. Digite este comando para implantar o app:

    mvn appengine:deploy -DprojectID=YOUR-PROJECT-ID
    
  2. No navegador da Web, digite este endereço. Substitua [YOUR_PROJECT_ID] pelo código do projeto:

    https://[YOUR_PROJECT_ID].appspot-preview.com
    

Para atualizar o app, implante a versão atualizada digitando o mesmo comando usado para implantá-lo pela primeira vez. A implantação cria uma nova versão do aplicativo e a define como padrão. As versões mais antigas são mantidas, bem como as instâncias de VM associadas. Esteja ciente de que essas versões e as instâncias de VM são recursos passíveis de cobrança.

Reduza custos excluindo as versões não padrão do app.

Para excluir uma versão do aplicativo:

  1. No Console do GCP, acesse a página "Versões do App Engine".

    Acessar a página Versões

  2. Clique na caixa de seleção ao lado da versão do aplicativo não padrão que você quer excluir.
  3. Clique no botão Excluir na parte superior da página para excluir a versão do aplicativo.

Para informações detalhadas sobre a remoção de recursos faturáveis, consulte a seção Como fazer a limpeza na etapa final deste tutorial.

Estrutura do aplicativo

Exemplo de estrutura de dados binários

O aplicativo usa o Google Cloud Storage para armazenar dados binários (neste caso, imagens). Este app continua a usar o Cloud Datastore para informações sobre o livro.

Como entender o código

Nesta seção, vamos analisar o código do aplicativo e explicar como ele funciona.

Como processar uploads do usuário

É simples usar o Google Cloud Storage API para Java. Na maioria dos casos, tudo o que você precisa é de uma única linha para autenticação local.

static {
  storage = StorageOptions.getDefaultInstance().getService();
}

Como fazer o upload de blobs para o Cloud Storage

Leia o arquivo de uma solicitação POST usando getPart. Confira se o arquivo está de acordo com os seus requisitos antes de fazer o upload.

/**
 * Extracts the file payload from an HttpServletRequest, checks that the file extension
 * is supported and uploads the file to Google Cloud Storage.
 */
public String getImageUrl(HttpServletRequest req, HttpServletResponse resp,
                          final String bucket) throws IOException, ServletException {
  Part filePart = req.getPart("file");
  final String fileName = filePart.getSubmittedFileName();
  String imageUrl = req.getParameter("imageUrl");
  // Check extension of file
  if (fileName != null && !fileName.isEmpty() && fileName.contains(".")) {
    final String extension = fileName.substring(fileName.lastIndexOf('.') + 1);
    String[] allowedExt = { "jpg", "jpeg", "png", "gif" };
    for (String s : allowedExt) {
      if (extension.equals(s)) {
        return this.uploadFile(filePart, bucket);
      }
    }
    throw new ServletException("file must be an image");
  }
  return imageUrl;
}

Faça o nome do arquivo ser único anexando a ele data e hora. Usando storage.create, passe uma BlobInfo criada com bucketName e fileName e configure o arquivo Access Control List para que todos os usuários possam ler e passar o InputStream do arquivo. O resultado é o URL público para o objeto.

/**
 * Uploads a file to Google Cloud Storage to the bucket specified in the BUCKET_NAME
 * environment variable, appending a timestamp to end of the uploaded filename.
 */
@SuppressWarnings("deprecation")
public String uploadFile(Part filePart, final String bucketName) throws IOException {
  DateTimeFormatter dtf = DateTimeFormat.forPattern("-YYYY-MM-dd-HHmmssSSS");
  DateTime dt = DateTime.now(DateTimeZone.UTC);
  String dtString = dt.toString(dtf);
  final String fileName = filePart.getSubmittedFileName() + dtString;

  // the inputstream is closed by default, so we don't need to close it here
  BlobInfo blobInfo =
      storage.create(
          BlobInfo
              .newBuilder(bucketName, fileName)
              // Modify access list to allow all users with link to read file
              .setAcl(new ArrayList<>(Arrays.asList(Acl.of(User.ofAllUsers(), Role.READER))))
              .build(),
          filePart.getInputStream());
  // return the public download link
  return blobInfo.getMediaLink();
}
Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…