In this article I will explain how to upload files to Google Drive using Google Drive API in ASP.Net with C# and VB.Net and the ASPSnippets.GoogleAPI.
Getting Google Client ID and Client Secret
In order to use Google Drive API for uploading files to Google Drive, you will need to create an Application in Google Console and get Client ID and Client Secret. For details please refer the following article.
Downloading ASPSnippets.GoogleAPI DLL
You can download the ASPSnippets.GoogleAPI API DLL using the following download link.
HTML Markup
The HTML Markup consist of an ASP.Net FileUpload control, a TextBox and a Button for uploading the File along with its Description to the Google Drive.
There’s also an HTML Table containing some Label controls for displaying the details of the uploaded file.
File:
<asp:FileUpload ID="FileUpload1" runat="server" />
<br />
<br />
Description:
<asp:TextBox ID="txtDescription" runat="server" Width="300"></asp:TextBox>
<hr />
<asp:Button ID="btnUpload" runat="server" Text="Upload" OnClick="UploadFile" />
<hr />
<table id="tblFileDetails" runat="server" visible="false" border="0" cellpadding="0"
cellspacing="0">
<tr>
<td>
Title
</td>
<td>
<asp:Label ID="lblTitle" runat="server" />
</td>
</tr>
<tr>
<td>
Id
</td>
<td>
<asp:Label ID="lblId" runat="server" />
</td>
</tr>
<tr>
<td>
Icon
</td>
<td>
<asp:Image ID="imgIcon" runat="server" />
</td>
</tr>
<tr id="rowThumbnail" runat="server" visible="false">
<td valign="top">
Thumbnail
</td>
<td>
<asp:Image ID="imgThumbnail" runat="server" Height="60" Width="60" />
</td>
</tr>
<tr>
<td>
Created Date
</td>
<td>
<asp:Label ID="lblCreatedDate" runat="server" />
</td>
</tr>
<tr>
<td>
Download
</td>
<td>
<asp:HyperLink ID="lnkDownload" Text="Download" runat="server" />
</td>
</tr>
</table>
Namespaces
You will need to import the following namespaces.
Note: You will need place the ASPSnippets.GoogleAPI DLL inside the BIN folder of your project and add its reference.
C#
using ASPSnippets.GoogleAPI;
using System.Web.Script.Serialization;
VB.Net
Imports ASPSnippets.GoogleAPI
Imports System.Web.Script.Serialization
Data Class
You will need to create the following class which will be used to hold the Google Drive file details returned from Google API after the file is uploaded.
The structure of this class is same as that of the JSON string returned from the Google API so that the JSON string can be easily deserialized to its object.
C#
public class GoogleDriveFile
{
public string Id { get; set; }
public string Title { get; set; }
public string OriginalFilename { get; set; }
public string ThumbnailLink { get; set; }
public string IconLink { get; set; }
public string WebContentLink { get; set; }
public DateTime CreatedDate { get; set; }
public DateTime ModifiedDate { get; set; }
}
VB.Net
Public Class GoogleDriveFile
Public Property Id() As String
Get
Return m_Id
End Get
Set(value As String)
m_Id = Value
End Set
End Property
Private m_Id As String
Public Property Title() As String
Get
Return m_Title
End Get
Set(value As String)
m_Title = Value
End Set
End Property
Private m_Title As String
Public Property OriginalFilename() As String
Get
Return m_OriginalFilename
End Get
Set(value As String)
m_OriginalFilename = Value
End Set
End Property
Private m_OriginalFilename As String
Public Property ThumbnailLink() As String
Get
Return m_ThumbnailLink
End Get
Set(value As String)
m_ThumbnailLink = Value
End Set
End Property
Private m_ThumbnailLink As String
Public Property IconLink() As String
Get
Return m_IconLink
End Get
Set(value As String)
m_IconLink = Value
End Set
End Property
Private m_IconLink As String
Public Property WebContentLink() As String
Get
Return m_WebContentLink
End Get
Set(value As String)
m_WebContentLink = Value
End Set
End Property
Private m_WebContentLink As String
Public Property CreatedDate() As DateTime
Get
Return m_CreatedDate
End Get
Set(value As DateTime)
m_CreatedDate = Value
End Set
End Property
Private m_CreatedDate As DateTime
Public Property ModifiedDate() As DateTime
Get
Return m_ModifiedDate
End Get
Set(value As DateTime)
m_ModifiedDate = Value
End Set
End Property
Private m_ModifiedDate As DateTime
End Class
Authenticate user using Google account
On the click of the Upload button, User is redirected to the Google Authorization page where user has to provide permission to the Application to access his Google Drive.
For this article I am requesting access to the Google Drive of the user by passing the https://www.googleapis.com/auth/drive.file scope. User can allow and deny and in both cases he is sent back to the URL set as the RedirectUri while creating the application in Google Developer Console.
The uploaded File and the Description is saved in Session variable for uploading the file to Google Drive after the permission is granted.
C#
protected void UploadFile(object sender, EventArgs e)
{
Session["File"] = FileUpload1.PostedFile;
Session["Description"] = txtDescription.Text;
GoogleConnect.Authorize("https://www.googleapis.com/auth/drive.file");
}
VB.Net
Protected Sub UploadFile(sender As Object, e As EventArgs)
Session("File") = FileUpload1.PostedFile
Session("Description") = txtDescription.Text
GoogleConnect.Authorize("https://www.googleapis.com/auth/drive.file")
End Sub
Uploading the File to Google Drive and displaying the details on page
The very first thing is that you need to set the Client ID and the Client Secret for the GoogleConnect class and you need to set the API as Drive as we need to use the Google Drive API.
The below code looks for access code (access token) in Query string and then this access code is passed to the PostFile function of the GoogleConnect class along with the File and its Description from the Session variable.
The PostFile function returns the uploaded Google Drive file details as JSON string which is then deserialized to the GoogleDriveFile class object.
Finally the details of the uploaded Google Drive file are displayed.
C#
protected void Page_Load(object sender, EventArgs e)
{
GoogleConnect.ClientId = "<Google Client ID>";
GoogleConnect.ClientSecret = "<Google Client Secret>";
GoogleConnect.RedirectUri = Request.Url.AbsoluteUri.Split('?')[0];
GoogleConnect.API = EnumAPI.Drive;
if (!string.IsNullOrEmpty(Request.QueryString["code"]))
{
string code = Request.QueryString["code"];
string json = GoogleConnect.PostFile(code, (HttpPostedFile)Session["File"], Session["Description"].ToString());
GoogleDriveFile file = (new JavaScriptSerializer()).Deserialize<GoogleDriveFile>(json);
tblFileDetails.Visible = true;
lblTitle.Text = file.Title;
lblId.Text = file.Id;
imgIcon.ImageUrl = file.IconLink;
lblCreatedDate.Text = file.CreatedDate.ToString();
lnkDownload.NavigateUrl = file.WebContentLink;
if (!string.IsNullOrEmpty(file.ThumbnailLink))
{
rowThumbnail.Visible = true;
imgThumbnail.ImageUrl = file.ThumbnailLink;
}
}
if (Request.QueryString["error"] == "access_denied")
{
ClientScript.RegisterClientScriptBlock(this.GetType(), "alert", "alert('Access denied.')", true);
}
}
VB.Net
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
GoogleConnect.ClientId = "<Google Client ID>";
GoogleConnect.ClientSecret = "<Google Client Secret>";
GoogleConnect.RedirectUri = Request.Url.AbsoluteUri.Split("?"c)(0)
GoogleConnect.API = EnumAPI.Drive
If Not String.IsNullOrEmpty(Request.QueryString("code")) Then
Dim code As String = Request.QueryString("code")
Dim json As String = GoogleConnect.PostFile(code, DirectCast(Session("File"), HttpPostedFile), Session("Description").ToString())
Dim file As GoogleDriveFile = (New JavaScriptSerializer()).Deserialize(Of GoogleDriveFile)(json)
tblFileDetails.Visible = True
lblTitle.Text = file.Title
lblId.Text = file.Id
imgIcon.ImageUrl = file.IconLink
lblCreatedDate.Text = file.CreatedDate.ToString()
lnkDownload.NavigateUrl = file.WebContentLink
If Not String.IsNullOrEmpty(file.ThumbnailLink) Then
rowThumbnail.Visible = True
imgThumbnail.ImageUrl = file.ThumbnailLink
End If
End If
If Request.QueryString("error") = "access_denied" Then
ClientScript.RegisterClientScriptBlock(Me.[GetType](), "alert", "alert('Access denied.')", True)
End If
End Sub
Screenshots
The details of the uploaded file displayed on page
The uploaded file with description in Google Drive
Demo
Downloads