example - API de Google Drive usando C#- Cargando
google drive api vb net (4)
Intento utilizar Google Drive API desde una aplicación asp.net para cargar archivos.
Problema: el código funciona de forma local, pero cuando se carga en el servidor no ocurre nada (la página solo se carga ... no se muestra ninguna pantalla de consentimiento. Ayudar a la aplicación. La carpeta "UploadedPdf" es escribible y existe client_secrets.json en la carpeta.
NOTA: No he instalado nada en el servidor, solo cargué todos los archivos incluidos los dll de la API de Google en la carpeta bin del servidor.
UserCredential credential;
using (var filestream = new FileStream(Server.MapPath("UploadedPdf/client_secrets.json"),
FileMode.Open, FileAccess.Read))
{
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(filestream).Secrets,
new[] { DriveService.Scope.Drive },
"user",
CancellationToken.None,
new FileDataStore(Server.MapPath("UploadedPdf/"))).Result;
}
// Create the service.
var service = new DriveService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = "Drive API Sample",
});
Google.Apis.Drive.v2.Data.File body = new Google.Apis.Drive.v2.Data.File();
body.Title = "My document";
body.Description = "A test document";
body.MimeType = "text/plain";
byte[] byteArray = System.IO.File.ReadAllBytes(Server.MapPath("UploadedPdf/sample.txt"));
System.IO.MemoryStream stream = new System.IO.MemoryStream(byteArray);
FilesResource.InsertMediaUpload request = service.Files.Insert(body, stream, "text/plain");
request.Upload();
Google.Apis.Drive.v2.Data.File file = request.ResponseBody;
FileDatastore coloca los archivos de forma predeterminada en% appData%. Normalmente haría algo así como. (supongamos que también uso "usuario")
new FileDataStore("Console.Analytics.Auth.Store")
Luego, cuando lo llamo, obtengo un directorio llamado
%AppData%/Roaming/Console.Analytics.Auth.Store
en ese directorio ahora vive un archivo llamado
Google.Apis.Auth.OAuth2.Responses.TokenResponse-user
No he probado qué hacer
new FileDataStore(Server.MapPath("UploadedPdf/"))
va a hacer, pero creo que va a obtener un directorio llamado
%AppData%/Roaming/serverpat/uploadpdf/
Lo que no creo es lo que buscas. Si eso es realmente lo que estás tratando de hacer, ¿has hecho que ese directorio sea grabable? Es posible que desee buscar en lugar de usar LocalFileDataStore .
No estoy seguro si este es su problema o no.
Recuerde también que es un "usuario" de codificación difícil, por lo que técnicamente su código le pedirá que se autentique una vez para "usuario" luego de que tenga la autenticación en ese archivo para "usuario", por lo que no hay razón para solicitarlo nuevamente.
Creo que estás llamando incorrecto a AuthorizeAsync (). Utilice la palabra clave await y el resultado remoto .Result. Tendrás que marcar el método como asincrónico para hacer esto.
También sugeriría usar el método UploadAsync () en su lugar. No necesita cargar todo el archivo en la memoria con ReadAllBytes () tampoco. Simplemente use File.OpenRead () y pase FileStream en lugar de MemoryStream.
Google tiene un código de ejemplo: https://developers.google.com/api-client-library/dotnet/guide/media_upload
Su código sugiere que está usando credenciales / flujo de trabajo de "Aplicación instalada", que se supone funciona bien si está ejecutando su aplicación ASP.NET localmente. Sin embargo, cuando mueve el mismo código a un servidor web, ya no es una aplicación instalada. Entra en la categoría de "Aplicación web".
Debe ir a Google Developer Console-> Credenciales-> Crear nueva ID de cliente y generar un nuevo conjunto de credenciales para su aplicación web. También debe cambiar el flujo de OAuth según esta guía:
https://developers.google.com/api-client-library/dotnet/guide/aaa_oauth#web-applications-aspnet-mvc
los pasos incluyen
1)Access to the internet and a web browser, in order to authorize the sample app.
2)A Google account with Drive enabled.
3)An environment to run programs in your selected language.
prueba esto,
https://developers.google.com/drive/v2/reference/files/insert#examples