در این مقاله آموزش می دهیم که چگونه با زبان های C# و VB.Net فایل ها را با استفاده از Google Drive API در Google Drive آپلود کنیم.
جهت استفاده از Google Drive API برای آپلود فایل ها در Google Drive باید یک اپلیکیشن در Google Console ایجاد کنیم و Client ID و Client Secret دریافت کنیم.
Google Drive API
دانلود فایل ASPSnippets.GoogleAPI DLL:
این dll به همراه سورس در انتهای مطلب برای دانلود قرار داده شده است.
بخش HTML
طراحی ما شامل یک کنترل FileUpload، TextBox و Button برای آپلود فایل به همراه توضیح آن در Google Drive، می باشد. همچنین شامل یک جدول با چندین lable برای نمایش جزئیات فایل آپلودشده است.
<asp:FileUploadID="FileUpload1"runat="server"/> <br/> <br/> توضیحات:<br/> <asp:TextBoxID="txtDescription"runat="server"Width="300"></asp:TextBox> <br/> <br/> <asp:ButtonID="btnUpload"runat="server"Text="Upload"OnClick="UploadFile"/> <hr/> <tableid="tblFileDetails"runat="server"visible="false"border="0"cellpadding="0" cellspacing="0"> <tr> <td> عنوان</td> <td> <asp:LabelID="lblTitle"runat="server"/> </td> </tr> <tr> <td> Id </td> <td> <asp:LabelID="lblId"runat="server"/> </td> </tr> <tr> <td> آیکون </td> <td> <asp:ImageID="imgIcon"runat="server"/> </td> </tr> <trid="rowThumbnail"runat="server"visible="false"> <tdvalign="top"> Thumbnail </td> <td> <asp:ImageID="imgThumbnail"runat="server"Height="60"Width="60"/> </td> </tr> <tr> <td> زمانایجاد </td> <td> <asp:LabelID="lblCreatedDate"runat="server"/> </td> </tr> <tr> <td> دانلود </td> <td> <asp:HyperLinkID="lnkDownload"Text="Download"runat="server"/> </td> </tr> </table>
فضاهای نام
فضاهای نام زیر را باید در پروژه وارد کنیم.
توجه داشته باشید که باید ASPSnippets.GoogleAPI DLL را درون فولدر BIN پروژه قرار داده و reference آن را اضافه نماییم.
کد C#:
using ASPSnippets.GoogleAPI; using System.Web.Script.Serialization;
کد VB.Net:
Imports ASPSnippets.GoogleAPI Imports System.Web.Script.Serialization
کلاس داده ها
برای نگه داری جزئیات فایل Google Driveای که Google API پس از آپلود فایل برمی گرداند، باید کلاسی مانند کلاس زیر ایجاد کنیم.
ساختار این کلاس به شکل همان رشته Json ای است که Google API برمی گرداند، بنابراین رشته Json به سادگی می تواند به اشیای متناظر خود تبدیل (Deserialize) شود.
کد 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
احراز هویت کاربر با استفاده اکانت Google:
با کلیک روی دکمه “آپلود”، کاربر به صفحه مجوزهای دسترسی گوگل (Google Authorization) هدایت می شود که کاربر مجوزهای موردنیاز را برای دسترسی به Google Drive را به اپلیکیشن می دهد.
در این مثال، با ارسال https://www.googleapis.com/auth/drive.fileدسترسی به Google Drive را درخواست می کنیم. کاربر می تواند این اجازه را به اپلیکیشن بدهد یا آن را نادیده بگیرد و در هر دو صورت، به آدرسی برگردانده می شود که در زمان ساخت اپلیکیشن در Google Developer Console به عنوان RedirectUri تنظیم شده است.
فایل آپلود شده و توضیحات آن در Session ذخیره می شود، تا بعد از گرفتن مجوز در Google Drive آپلود شود.
کد 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
آپلود فایل در Google Drive و نمایش جزئیات در صفحه
اولین چیزی که باید تنظیم نماییم، Client ID و Client Secret برای کلاس GoogleConnect می باشد و همچنیدن باید API را برای استفاده از Google Drive API روی Driveتنظیم کنیم.
کد زیر به دنبال کد دسترسی (access token) در Query string است و سپس این کد دسترسی را به همراه فایل و توضیحات آن از Session به تابع PostFile که در کلاس GoogleConnect وجود دارد، ارسال می کنیم.
تابع PostFile جزئیات فایل آپلودشده در Google Drive را در یک رشته Json برمی گرداند که سپس به شی کلاس GoogleDriveFile تبدیل (Deserialize) می شود.
در نهایت، جزئیات فایل آپلود شده در Google Drive نمایش داده می شود.
کد 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
نمایش جزئیات فایل آپلودشده
توضیحات فایل آپلود شده در Google Drive:
هیچ دیدگاهی نوشته نشده است.