I'm making a simple Application that Links to a Google Drive Account and then can Upload Files to any Directory and respond with a (direct) download Link. I already got my User Credentials and DriveService objects, but I can't seem to find any good examples or Docs. on the APIv3.
As I'm not very familiar with OAuth
, I'm asking for a nice and clear explanation on how to Upload a File with byte[]
content now.
My Code for Linking the Application to a Google Drive Account: (Not sure if this works perfectly)
UserCredential credential;
string dir = Directory.GetCurrentDirectory();
string path = Path.Combine(dir, "credentials.json");
File.WriteAllBytes(path, Properties.Resources.GDJSON);
using(var stream = new FileStream(path, FileMode.Open, FileAccess.Read)) {
string credPath = Path.Combine(dir, "privatecredentials.json");
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
Scopes,
"user",
CancellationToken.None,
new FileDataStore(credPath, true)).Result;
}
// Create Drive API service.
_service = new DriveService(new BaseClientService.Initializer() {
HttpClientInitializer = credential,
ApplicationName = ApplicationName,
});
File.Delete(path);
My Code for Uploading so far: (Does not work obviously)
public void Upload(string name, byte[] content) {
Google.Apis.Drive.v3.Data.File body = new Google.Apis.Drive.v3.Data.File();
body.Name = name;
body.Description = "My description";
body.MimeType = GetMimeType(name);
body.Parents = new List() { new ParentReference() { Id = _parent } };
System.IO.MemoryStream stream = new System.IO.MemoryStream(content);
try {
FilesResource.InsertMediaUpload request = _service.Files.Insert(body, stream, GetMimeType(_uploadFile));
request.Upload();
return request.ResponseBody;
} catch(Exception) { }
}
Thanks!
I think you're going in the right direction, just a bit unsure.
The main steps in using the Google Drive API for a C# (.NET) application are
Enable the Google Drive API in your Google Account
Install the Google Drive SDK for .NET framework using "NuGet" package manager. For this, in Visual Studio, go to Tools -> NuGet Package Manager -> Package Manager Console and then enter the following command
Make sure you "use" all the packages/libraries in your application using the "using" statements at the top. For example,
The code you have written above seems correct to me (I have not hard tested it). But if you have trouble in uploading files with it, you can try different approaches by the links mentioned below.
The above steps are largely taken from Google Drive API's .NET Quickstart page.
Further, you can and should refer to Google's documentation for the Google Drive SDK for .NET framework.
I hope the above content helped you.
Once you have enabled your Drive API, registered your project and obtained your credentials from the Developer Consol, you can use the following code for recieving the user's consent and obtaining an authenticated Drive Service
Following is a working piece of code for uploading to Drive.
Here's the little function for determining the MimeType:
Additionally, you can register for the
ProgressChanged
event and get the upload status.And
That's pretty much it on Uploading..
Source.
i have the same problem on mine application winforms c# fw 4.0 i installed already google drive api v3 by nuget and also created json file from googles api and inserted into project request.ResponseBody == null???
anyone has a solution for it ?
thanks by advance
If you've followed Google Drive API's .NET Quickstart guide, then you probably remember during first launch, a web page from google drive was prompting for authorization grant to access google drive with "Read only" permission?
The default scope "DriveService.Scope.DriveReadonly" from the quickstart guide can't be used if you intend on uploading files.
This worked for me
Remove "Drive ProtoType" from Apps connected to your account
Create another set of credentials with a new application name eg "Drive API .NET Quickstart2" in API Manager
Request access with this scope "DriveService.Scope.DriveFile" private static readonly string[] Scopes = { DriveService.Scope.DriveReadonly }; private static readonly string ApplicationName = "Drive API .NET Quickstart2";}
You should land on a new page from google drive requesting new grant
Drive Prototype would like to: View and manage Google Drive files and folders that you have opened or created with this app
After allowing access, your application should be able to upload.