# Como implementar upload de arquivo para o Google Drive

**URL:** <https://community.latromi.com.br/t/como-implementar-upload-de-arquivo-para-o-google-drive/1193>\
**Category:** Tutoriais\
**Tags:** web-api, csharp, form\
**Created:** [Fevereiro 27, 2024, 6:49pm UTC](https://community.latromi.com.br/t/como-implementar-upload-de-arquivo-para-o-google-drive/1193 "2024-02-27T18:49:20Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![daniel.giacomelli](https://community.latromi.com.br/user_avatar/community.latromi.com.br/daniel.giacomelli/32/1476_2.png) [@daniel.giacomelli](https://community.latromi.com.br/u/daniel.giacomelli)\
**Post date:** [Fevereiro 27, 2024, 6:49pm UTC](https://community.latromi.com.br/t/como-implementar-upload-de-arquivo-para-o-google-drive/1193/1 "2024-02-27T18:49:20Z")

</div>

## Visão Geral

Atualmente, o Latromi possui 3 destinos para upload de arquivos:

- Diretório do servidor
- FTP
- Banco de dados

Neste tópico vamos descobrir como podemos implementar o upload de arquivos para o **Google Drive** , usando códigos C# do Formulário.

 ![image](https://community.latromi.com.br/uploads/default/original/2X/0/08f4e4a672ae7f81231d5c767b4264350ad2d4f8.png)

A Implementação vai funcionar da seguinte maneira:

1. Quando o Formulário for carregado, um diretório temporário será criado no servidor para hospedar os arquivos.

2. Quando o usuário realizar o upload do arquivo, este arquivo será confirmado e enviado para o diretório do servidor (que definimos no passo anterior).

3. Em seguida, vamos chamar um código C# que vai fazer a leitura do arquivo e transferi-lo para o Google Drive.

4. Por fim, o arquivo será excluído do diretório temporário.

## Configuração do Google

Antes de começarmos, precisamos fazer as configurações necessárias na sua conta do Google.

### Google Cloud

#### Criando a Conta de Serviço

A conta de serviço será usada para fazermos a autenticação no Google Drive, sem a necessidade de implementarmos toda a dinâmica do protocolo OAuth2.

Siga os passos a seguir para criar uma **Conta de Serviço** do Google:

1. Abra sua conta no [Google Cloud](https://console.cloud.google.com/), e acesse o menu **IAM e  
Administrador **→** IAM**

2. Nas opções que aparecem à esquerda, clique em **Contas de Serviço**.

3. Clique no botão **Criar conta de serviço**.

4. Preencha o nome da conta, e no **Papel** , escolha a opção **Editor**.

#### Criando a Chave

Agora precisamos gerar uma chave para realizar a autenticação da conta de serviço criada. Para isso, siga os próximos passos:

1. Selecione a conta criada, clique no ícone **⋮** à direita, e em seguida clique em **Gerenciar Chaves**.

2. Na tela a seguir, clique em **Adicionar Chave** → **Criar Nova Chave**.

3. Selecione a opção “JSON” e clique no botão **Criar**.

4. Um arquivo com extensão `.json` será baixado no seu computador. Usaremos este arquivo no código C# do Formúlário.

Por fim, copie o E-mail gerado para o usuário de serviço. Vamos precisa dele para conceder as persmissões no **Google Drive**.

Exemplo: `teste-google-drive@latromi-dev.iam.gserviceaccount.com`

### Google Drive

#### Compartilhando a Pasta

Acesse o Google Drive, e navegue até a pasta onde deseja armazenar os arquivos. Clique nas **Configurações de Compartilhamento** , e adicione o e-mail da conta de serviço do Google Cloud, com papel de “Administrador de Conteúdo”.

 ![image](https://community.latromi.com.br/uploads/default/original/2X/0/0331ffa6d29773a3474172b0bc78d922625fd4f6.png)

## Formulário

Consumir as APIs do Google do lado do servidor exige alguma complexidade em função da criptografia envolvida. Por este motivo, usaremos a biblioteca [.NET do Google Drive](https://developers.google.com/api-client-library/dotnet/apis/drive/v3) desenvolvida pelo próprio Google.

### DLL .NET

Para facilitar o uso da biblioteca (_que precisa ser referenciada no projeto_), encapsulamos o código C# que vai fazer o Upload para o Google Drive em um projeto independente, do tipo **Class Library** do Visual Studio, chamado **LATROMI.Facades.GoogleDrive**. Chamaremos a DLL gerada por este projeto de dentro do Formulário do Latromi.

Você pode conferir o código fonte completo desta DLL no [Github da Latromi](https://github.com/latromi-technology/latromi-facades).

**Baixe os arquivos de distribuição** mais recentes do projeto [neste link](https://github.com/latromi-technology/latromi-facades/releases/tag/net48), e faça a extração dos arquivo em uma pasta do servidor.

Neste exemplo, a pasta onde extraí os arquivos foi “C:\LATROMI\libs\latromi-facades”.

Não se esqueça de manter todos os arquivos extraídos na pasta.

### Variáveis

#### v\_working\_folder

Essa variável vai receber um texto aleatório para ser usado como nome de pasta temporária.

Utilize o evento “Load” do Formulário para preenche-la usando a ação “Popular Campos e Variáveis”. No exemplo a seguir, vamos preencher um valor aletório do tipo UUID, via C#:

 ![image](https://community.latromi.com.br/uploads/default/original/2X/6/647d6856b1fccb335b833dbf523785e2d91ee3f2.png)

Informe o código C# abaixo:

```cs
return Guid.NewGuid().ToString("N");

```

#### v\_result

Essa variável vai receber uma lista com ID dos arquivos enviados para o Google Drive, separados por “,”. Você pode usar essa variável para salvar os IDs no banco de dados.

### Campos

Adicione um campo do tipo “Upload”, configure a propriedade “Destino” como “Diretório” e informe um caminho conforme o exemplo a abaixo, usando a variável “v\_working\_folder”:

> C:\Temp\uploads{?VAR.v\_working\_folder}

### Procedimentos

Adicione um novo Procedimento, cuja função será consumir a DLL que mencionamos anteriormente (projeto do Github).

A função deste Procedimento será pegar o arquivo que foi enviado para a pasta temporária e transferindo-o para o Google Drive. Vou chamar este procedimento de **GoogleDriveUpload**.

Adicione uma ação do tipo “Exceutar código C#” e informe o código a seguir:

```cs
using System;
using System.IO;
using System.Reflection;
using Newtonsoft.Json;

// Diretório temporário, para onde o arquivo foi enviado
var folder = @"C:\Temp\uploads\" + (string)Variables["v_working_folder"].Value;

// Carrega o assembly "LATROMI.Facades.GoogleDrive.dll" de forma "desconectada"
var assembly = LoadAssembly(@"C:\LATROMI\libs\latromi-facades\LATROMI.Facades.GoogleDrive.dll");

// Cria dinâmicamente uma instância de "GoogleDriveUploader"
dynamic uploader = Activator.CreateInstance(
    assembly.GetType("LATROMI.Facades.GoogleDrive.GoogleDriveUploader")
    );

// Carrega o arquivo JSON com as credenciais da Conta de Serviço
uploader.LoadCredentialFromFile(@"C:\LATROMI\libs\latromi-dev-769bf3304165.json");

// ID da pasta do Google Drive, onde o arquivo será alocado
uploader.SetFolder("123X9IYCdH-vd88RsH80LlHN221wnftFe");

var fileIdList = new List<string>();
foreach(string filePath in Directory.GetFiles(folder))
{
    // Faz o upload do arquivo, e retorna o ID
    string fileId = uploader.UploadFromFile(filePath);    
    
    fileIdList.Add(fileId);
    
    // Exclui o arquivo do diretório 
    // quando o upload for concluído.
    File.Delete(filePath);
}

// Coloca os IDs dos arquivos no campo de resultado
Variables["v_result"].Value = string.Join(",", fileIdList);

```

Perceba que estamos utilizando o arquivo com as credenciais da conta de serviço do Google, ao chamar o método "uploader.LoadCredentialFromFile(...)". Tenha cuidado para manter este arquivo protegido. 

Se preferir, você pode carregar este JSON diretamente do banco de dados, e informálo através do método “uploader.LoadCredentialFromJson(…)”

### Última etapa

Por fim, basta chamar a ação “ **Confirmar Uploads** ” e em seguida chamar o procedimento “ **GoogleDriveUpload** ”.

Você pode fazer isso no ponto onde for mais conveniente para sua rotina. No meu exemplo, estou fazendo no evento “FileUploaded” do campo do tipo Upload.

---

<div class="post-metadata">

**Author:** ![thiago.cascaes](https://community.latromi.com.br/letter_avatar_proxy/v4/letter/t/8e8cbc/32.png) [@thiago.cascaes](https://community.latromi.com.br/u/thiago.cascaes)\
**Post date:** [Fevereiro 28, 2024, 10:57am UTC](https://community.latromi.com.br/t/como-implementar-upload-de-arquivo-para-o-google-drive/1193/2 "2024-02-28T10:57:21Z")

</div>

Bah! Que show!! 😍 😍 😍  
Muito bom poder executar código C# sempre que necessário na plataforma Latromi!  
Arrasou @daniel.giacomelli !!! 👏 👏 👏
