【发布时间】:2017-01-09 21:22:56
【问题描述】:
我可以通过以下引用使用 API 从 Google Drive 获取文件:Display (View) list of files from Google Drive using Google Drive API in ASP.Net with C# and VB.Net 。
但我只得到 100 条记录。我有几千条记录。任何人都可以让我知道要更改什么以获得完整的记录显示。
请在下面找到代码:
namespace GoogleDrive
{
public partial class gDrive : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
GoogleConnect.ClientId = "942196220502-k107l4mtn6n606d8m38pp2k6clfmbftd.apps.googleusercontent.com";
GoogleConnect.ClientSecret = "oJxTZ2Bw9QfOlrc7KgxsEf9o";
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.Fetch("me", code);
GoogleDriveFiles files = new JavaScriptSerializer().Deserialize<GoogleDriveFiles>(json);
gv1.DataSource = files.Items.Where(i => i.Labels.Trashed == false);
gv1.DataBind();
}
else if (Request.QueryString["error"] == "access_denied")
{
ClientScript.RegisterClientScriptBlock(this.GetType(), "alert", "alert('Access denied.')", true);
}
else
{
GoogleConnect.Authorize("https://www.googleapis.com/auth/drive.readonly");
}
}
public class GoogleDriveFiles
{
public List<GoogleDriveFile> Items { get; set; }
}
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; }
public GoogleDriveFileLabel Labels { get; set; }
public string alternateLink { get; set; }
public Boolean editable { get; set; }
}
public class GoogleDriveFileLabel
{
public bool Starred { get; set; }
public bool Hidden { get; set; }
public bool Trashed { get; set; }
public bool Restricted { get; set; }
public bool Viewed { get; set; }
}
}
}
以下代码适用于获取前1000条记录。
namespace gDrive
{
class Program
{
static string[] Scopes = { DriveService.Scope.DriveReadonly };
static string ApplicationName = "Drive API .NET Quickstart";
static void Main(string[] args)
{
UserCredential credential;
gDriveTableAdapter gDrive = new gDriveTableAdapter();
using (var stream =
new FileStream("client_secret.json", FileMode.Open, FileAccess.Read))
{
string credPath = System.Environment.GetFolderPath(
System.Environment.SpecialFolder.Personal);
credPath = Path.Combine(credPath, ".credentials/drive-dotnet-quickstart.json");
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
Scopes,
"user",
CancellationToken.None,
new FileDataStore(credPath, true)).Result;
//Console.WriteLine("Credential file saved to: " + credPath);
}
// Create Drive API service.
var service = new DriveService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = ApplicationName,
});
// Define parameters of request.
FilesResource.ListRequest listRequest = service.Files.List();
listRequest.PageSize = 1000;
listRequest.Fields = "nextPageToken, files(webViewLink, name)";
// List files.
IList<Google.Apis.Drive.v3.Data.File> files = listRequest.Execute()
.Files;
Console.WriteLine("Processing...\n");
if (files != null && files.Count > 0)
{
foreach (var file in files)
{
gDrive.InsertQuery(file.Name, file.WebViewLink);
}
Console.WriteLine(files.Count + " records fetched.");
}
else
{
Console.WriteLine("No files found.");
}
Console.Read();
}
}
}
【问题讨论】:
-
This example page 显示:
listRequest.PageSize = 10;,阅读 here 我们看到默认值为 100,就像您看到的那样。如第二页所示,您可以将其设置为 1,000。您显然必须以某种方式使用pageToken参数才能在 1,000 之后继续获取文件。向我们展示您的代码而不是指向另一个页面的链接会更有帮助。 -
@quantic添加编码,请找到
-
对不起,我不知道 google drive 的 API 或如何使用它。也许您应该遵循我链接的示例而不是您找到的示例,因为我的示例较新并且来自谷歌本身。在您的帖子中留下
ClientId和ClientSecret是否安全? -
它只是一个测试文件,所以没有问题
-
在此链接上发布了一个新问题 - stackoverflow.com/questions/41572228/…
标签: c# asp.net .net google-api google-drive-api