UPLOAD GOOGLE DRIVE
Ola pessoal;
Estou com a necessidade de fazer upload de um arquivo para o Google Drive, pesquisando alguns exemplos na net, encontrei este:
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:
Alguma luz?
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?
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.
Leia a mensagem de erro. Ela diz que o método tem apenas um parâmetro e você está passando três.
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.
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#.
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);
}
}
}
}
Realmente não testei com arquivos maiores, simplesmente enviei um arquivo texto... Talvez exista alguma limitação, mas não sei dizer.
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)
Por isso que sempre temos que verificar a documentação, olha só o detalhe(anexo)
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.
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