Outro detalhe importante é que, por padrão, a listagem de arquivos também retorna todos os arquivos que estiverem na lixeira. Se esse não for o comportamento que você está querendo, basta configurar um filtro para o request, através da propriedade “Q“. Exemplo:
1
2
| // C# request.Q = "trashed=false" ; |
1
2
| ' VB.NET Request.Q = "trashed=false" |
Listagem paginada
Como vimos na seção anterior, o máximo de arquivos e pastas que serão listados pela API do Google Drive é 1000. Mas, o que fazemos se quisermos listar mais do que 1000 itens? Nesse caso, a saída é fazer uma listagem paginada, ou seja, retornarmos “X” itens de cada vez.
Para fazermos isso, nós temos que retornar também o “nextPageToken” na hora de listarmos os itens. Com isso, sempre que executarmos o request, caso ainda existam itens para serem retornados, o resultado sempre contará com um token que possibilitará a listagem da próxima página. Veja como é que fica o código de um novo método para listagem de arquivos que receberá também a quantidade de itens por página:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
| // C# private static void ListarArquivosPaginados(Google.Apis.Drive.v3.DriveService servico, int arquivosPorPagina) { var request = servico.Files.List(); request.Fields = "nextPageToken, files(id, name)" ; //request.Q = "trashed=false"; // Default 100, máximo 1000. request.PageSize = arquivosPorPagina; var resultado = request.Execute(); var arquivos = resultado.Files; while (arquivos != null && arquivos.Any()) { foreach ( var arquivo in arquivos) { Console.WriteLine(arquivo.Name); } if (resultado.NextPageToken != null ) { Console.WriteLine( "Digite ENTER para ir para a próxima página" ); Console.ReadLine(); request.PageToken = resultado.NextPageToken; resultado = request.Execute(); arquivos = resultado.Files; } else { arquivos = null ; } } } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| ' VB.NET Private Sub ListarArquivosPaginados(Servico As Google.Apis.Drive.v3.DriveService, ArquivosPorPagina As Integer ) Dim Request = Servico.Files.List() Request.Fields = "nextPageToken, files(id, name)" 'Request.Q = "trashed=false" ' Default 100, máximo 1000. Request.PageSize = ArquivosPorPagina Dim Resultado = Request.Execute() Dim Arquivos = Resultado.Files While Arquivos IsNot Nothing AndAlso Arquivos.Any() For Each arquivo In Arquivos Console.WriteLine(arquivo.Name) Next If Resultado.NextPageToken IsNot Nothing Then Console.WriteLine( "Digite ENTER para ir para a próxima página" ) Console.ReadLine() Request.PageToken = Resultado.NextPageToken Resultado = Request.Execute() Arquivos = Resultado.Files Else Arquivos = Nothing End If End While End Sub |
No bloco “using“, nós podemos chamar esse novo método, passando a quantidade de itens por página. Por exemplo, o código para listarmos os itens de 10 em 10 ficaria assim:
1
2
3
4
5
6
| // C# Console.Clear(); Console.WriteLine( "Listagem paginada" ); ListarArquivosPaginados(servico, 10); Console.WriteLine( "Fim Listagem paginada" ); Console.ReadLine(); |
1
2
3
4
5
6
| ' VB.NET Console.Clear() Console.WriteLine( "Listagem paginada" ) ListarArquivosPaginados(Servico, 10) Console.WriteLine( "Fim Listagem paginada" ) Console.ReadLine() |
Veja só o resultado:
Criação de diretórios
Agora que já conseguimos listar os itens do nosso Google Drive, vamos conferir como é que podemos fazer para criarmos um novo diretório. Estranhamente, tudo no Google Drive são “itens“. Ou seja, arquivos e diretórios são ambos tratados como “File” (arquivo). A única diferença é que diretórios possuem um “mime type” específico, que fará com que o Google Drive entenda que ele é um diretório, e não um arquivo.
A criação do diretório é bem simples. Basta criarmos uma nova instância da classe “File” e configurarmos um nome e o “mime type” indicando que ele é um diretório. Em seguida, criamos e executamos um request utilizando o método “Files.Create” passando a instância de “File” que instanciamos anteriormente:
1
2
3
4
5
6
7
8
9
| // C# private static void CriarDiretorio(Google.Apis.Drive.v3.DriveService servico, string nomeDiretorio) { var diretorio = new Google.Apis.Drive.v3.Data.File(); diretorio.Name = nomeDiretorio; diretorio.MimeType = "application/vnd.google-apps.folder" ; var request = servico.Files.Create(diretorio); request.Execute(); } |
1
2
3
4
5
6
7
8
| ' VB.NET Private Sub CriarDiretorio(Servico As Google.Apis.Drive.v3.DriveService, NomeDiretorio As String ) Dim Diretorio = New Google.Apis.Drive.v3.Data.File() Diretorio.Name = NomeDiretorio Diretorio.MimeType = "application/vnd.google-apps.folder" Dim Request = Servico.Files.Create(Diretorio) Request.Execute() End Sub |
Para criarmos um diretório chamado “NovoDiretorio” temos que fazer a seguinte chamada dentro do nosso bloco “using“:
1
2
3
4
5
6
| // C# Console.Clear(); Console.WriteLine( "Criar diretório" ); CriarDiretorio(servico, "NovoDiretorio" ); Console.WriteLine( "Fim Criar diretório" ); Console.ReadLine(); |
1
2
3
4
5
6
| ' VB.NET Console.Clear() Console.WriteLine( "Criar diretório" ) CriarDiretorio(Servico, "NovoDiretorio" ) Console.WriteLine( "Fim Criar diretório" ) Console.ReadLine() |
Porém, ao tentarmos executar esse código com o escopo de permissões que utilizamos anteriormente (“Scope.DriveReadonly“), nós receberemos um erro informando que não temos permissões suficientes:
Nenhum comentário:
Postar um comentário