UPLOAD GOOGLE DRIVE

W8.LISBOA 12/09/2016 19:30:27
#466813
Ola pessoal;

Estou com a necessidade de fazer upload de um arquivo para o Google Drive, pesquisando alguns exemplos na net, encontrei este:

  Imports Google.Apis.Auth
Imports Google.Apis.Download
Imports Google.Apis.Drive.v2
Imports Google.Apis.Auth.OAuth2
Imports Google.Apis.Services
Imports System.Threading
Imports Google.Apis.Drive.v2.Data

Module Module1

Sub Main()
UploadFile([Ô]C:\file_to_upload.txt[Ô])
End Sub

Private Service As DriveService = New DriveService

Private Sub CreateService()
Dim ClientId = [Ô]meu id[Ô]
Dim ClientSecret = [Ô]minha chave secreta[Ô]
Dim MyUserCredential As UserCredential = GoogleWebAuthorizationBroker.AuthorizeAsync(New ClientSecrets() With {.ClientId = ClientId, .ClientSecret = ClientSecret}, {DriveService.Scope.Drive}, [Ô]user[Ô], CancellationToken.None).Result
Service = New DriveService(New BaseClientService.Initializer() With {.HttpClientInitializer = MyUserCredential, .ApplicationName = [Ô]Google Drive VB Dot Net[Ô]})
End Sub

Private Sub UploadFile(FilePath As String)
If Service.ApplicationName <> [Ô]Google Drive VB Dot Net[Ô] Then CreateService()
Dim TheFile As New File()
TheFile.Title = [Ô]My document[Ô]
TheFile.Description = [Ô]A test document[Ô]
TheFile.MimeType = [Ô]text/plain[Ô]
Dim ByteArray As Byte() = System.IO.File.ReadAllBytes(FilePath)
Dim Stream As New System.IO.MemoryStream(ByteArray)
Dim UploadRequest As FilesResource.InsertMediaUpload = Service.Files.Insert(TheFile, Stream, TheFile.MimeType)
UploadRequest.Upload()
Dim file As File = UploadRequest.ResponseBody
MsgBox([Ô]Upload Finished[Ô])
End Sub
End Module


No entanto não consegui solução para o erro: [Ô]muitos argumentos para [ô]Public Overridable Function Insert(body As Google.Apis.Drive.v2.Data.File) As Google.Apis.Drive.v2.FilesResource.InsertRequest[Ô] na seguinte linha de código:
  Dim UploadRequest As FilesResource.InsertMediaUpload = Service.Files.Insert(TheFile, Stream, TheFile.MimeType) 


Alguma luz?
MOUSER 12/09/2016 23:56:14
#466829
Verifique se os Upload esta ocorrendo uma por vez, tente implementar com algum laço de repetição. Talvez esteja enviando 2 ou mais arquivos em uma unica variável de uma unica vez, Talvez com laço ele repita utilizando um arquivo por vez.
KERPLUNK 13/09/2016 01:47:53
#466830
Leia a mensagem de erro. Ela diz que o método tem apenas um parâmetro e você está passando três.
W8.LISBOA 14/09/2016 20:05:19
#466931
Citação:

:
Leia a mensagem de erro. Ela diz que o método tem apenas um parâmetro e você está passando três.



Kerp, verificando a documentação pode notar que são realmente dois parâmetros, devo estar cometendo erro em algum outro ponto.
KERPLUNK 14/09/2016 20:52:30
#466935
Este aqui, eu testei e funciona perfeitamente.
W8.LISBOA 15/09/2016 20:53:19
#466987
Kerp, adaptei o exemplo ao meu uso, funciona com arquivos leves, no entanto com arquivos aproximante ou acima de 1MB, tenho uma exception sem muitos detalhes, acredito que devo incrementar um timeout, mas não tive exito nas propriedades do método.

Você chegou a testar com arquivos relativamente grandes?

Ps. Vou alterar o tópico para C#.

  using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using Google.Apis.Drive.v2;
using Google.Apis.Drive.v2.Data;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button2_Click(object sender, EventArgs e)
{
DriveService service;
String title;
String description;
String parentId;
String mimeType;
String filename;

//service;
String CLIENT_ID = [Ô]sua id[Ô];
String CLIENT_SECRET = [Ô]sua chave secreta[Ô];
service = Authentication.AuthenticateOauth(CLIENT_ID, CLIENT_SECRET, Environment.UserName);

title = [Ô]titulo[Ô];
description = [Ô]descriçao[Ô];
parentId = null;
mimeType = null;
filename = @[Ô]C:\Teste\Dados.mdb[Ô];

if (service == null)
{
MessageBox.Show([Ô]erro na aplicação[Ô]);
return;
}

// File[ô]s metadata.
File body = new File();
body.Title = title;
body.Description = description;
body.MimeType = mimeType;

// Set the parent folder.
if (!String.IsNullOrEmpty(parentId))
{
body.Parents = new List<ParentReference>() { new ParentReference() { Id = parentId } };
}

// File[ô]s content.
byte[] byteArray = System.IO.File.ReadAllBytes(filename);
System.IO.MemoryStream stream = new System.IO.MemoryStream(byteArray);

try
{
FilesResource.InsertMediaUpload request = service.Files.Insert(body, stream, mimeType);
request.Upload();

MessageBox.Show([Ô]Processo finalizado com sucesso[Ô]);
}
catch (Exception ex)
{
MessageBox.Show([Ô]um erro ocorreu: [Ô] + ex.Message);
}
}
}
}
KERPLUNK 15/09/2016 21:17:31
#466989
Realmente não testei com arquivos maiores, simplesmente enviei um arquivo texto... Talvez exista alguma limitação, mas não sei dizer.
W8.LISBOA 15/09/2016 21:47:18
#466991
Apos quatro dias de desespero, não é acabei de encontrar a solução.

Por isso que sempre temos que verificar a documentação, olha só o detalhe(anexo)



KERPLUNK 15/09/2016 22:48:40
#466996
Imaginei que teria alguma limitação... Mas nunca usei o google drive como repositório de arquivos à não ser para uso pessoal. Para uso profissional, tem várias alternativas mais simples e até mesmo algumas gratuitas. Mas sim, é google pode ser uma alternativa para isso.
W8.LISBOA 15/09/2016 23:14:51
#466998
Citação:

:
Imaginei que teria alguma limitação... Mas nunca usei o google drive como repositório de arquivos à não ser para uso pessoal. Para uso profissional, tem várias alternativas mais simples e até mesmo algumas gratuitas. Mas sim, é google pode ser uma alternativa para isso.



Entendo, e agradeço a contribuição.

Quanto a limitação, é somente na transferência de dados, simplesmente temos que [Ô]quebrar[Ô] o arquivo, enviar em partes, ficando assim:

                  FilesResource.InsertMediaUpload request = service.Files.Insert(body, stream, mimeType);
request.ChunkSize = 256 * 1024;
request.Upload();


Claro, é muito cedo ainda para comemorar, mas estou fazendo vários testes aqui e tudo funcionando perfeitamente.
Tópico encerrado , respostas não são mais permitidas