C# 从 Google 驱动器下载电子表格
C# Downloading a spreadsheet from Google Drive
我正在尝试使用来自 FileResource API 的 ExportLinks 从 Google 驱动器下载 sheet。
但是,我得到的响应不是传播sheet,而是代表传播sheet 或类似内容的HTML 文件。
这是我正在使用的请求:
FilesResource.GetRequest getF = new FilesResource.GetRequest(service, "1y92Rok6oYKMwvc-Oq4Uurah7y552sfmIbyD9Wzmpq54");
Google.Apis.Drive.v2.Data.File f = getF.Execute();
string downloadUrl = f.ExportLinks["application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"];
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(downloadUrl));
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
ReadWriteStream(response.GetResponseStream(), File.OpenWrite("D:\tmp.xlsx"));
我用来存储流的函数:
static private void ReadWriteStream(Stream readStream, Stream writeStream)
{
int Length = 256;
Byte[] buffer = new Byte[Length];
int bytesRead = readStream.Read(buffer, 0, Length);
// write the required bytes
while (bytesRead > 0)
{
writeStream.Write(buffer, 0, bytesRead);
bytesRead = readStream.Read(buffer, 0, Length);
}
readStream.Close();
writeStream.Close();
}
谁能指出我做错了什么?
这是我常用的方法
/// <summary>
/// Download a file
/// Documentation: https://developers.google.com/drive/v2/reference/files/get
/// </summary>
/// <param name="_service">a Valid authenticated DriveService</param>
/// <param name="_fileResource">File resource of the file to download</param>
/// <param name="_saveTo">location of where to save the file including the file name to save it as.</param>
/// <returns></returns>
public static Boolean downloadFile(DriveService _service, File _fileResource, string _saveTo)
{
if (!String.IsNullOrEmpty(_fileResource.DownloadUrl))
{
try
{
var x = _service.HttpClient.GetByteArrayAsync(_fileResource.DownloadUrl );
byte[] arrBytes = x.Result;
System.IO.File.WriteAllBytes(_saveTo, arrBytes);
return true;
}
catch (Exception e)
{
Console.WriteLine("An error occurred: " + e.Message);
return false;
}
}
else
{
// The file doesn't have any content stored on Drive.
return false;
}
}
我正在尝试使用来自 FileResource API 的 ExportLinks 从 Google 驱动器下载 sheet。
但是,我得到的响应不是传播sheet,而是代表传播sheet 或类似内容的HTML 文件。
这是我正在使用的请求:
FilesResource.GetRequest getF = new FilesResource.GetRequest(service, "1y92Rok6oYKMwvc-Oq4Uurah7y552sfmIbyD9Wzmpq54");
Google.Apis.Drive.v2.Data.File f = getF.Execute();
string downloadUrl = f.ExportLinks["application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"];
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(downloadUrl));
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
ReadWriteStream(response.GetResponseStream(), File.OpenWrite("D:\tmp.xlsx"));
我用来存储流的函数:
static private void ReadWriteStream(Stream readStream, Stream writeStream)
{
int Length = 256;
Byte[] buffer = new Byte[Length];
int bytesRead = readStream.Read(buffer, 0, Length);
// write the required bytes
while (bytesRead > 0)
{
writeStream.Write(buffer, 0, bytesRead);
bytesRead = readStream.Read(buffer, 0, Length);
}
readStream.Close();
writeStream.Close();
}
谁能指出我做错了什么?
这是我常用的方法
/// <summary>
/// Download a file
/// Documentation: https://developers.google.com/drive/v2/reference/files/get
/// </summary>
/// <param name="_service">a Valid authenticated DriveService</param>
/// <param name="_fileResource">File resource of the file to download</param>
/// <param name="_saveTo">location of where to save the file including the file name to save it as.</param>
/// <returns></returns>
public static Boolean downloadFile(DriveService _service, File _fileResource, string _saveTo)
{
if (!String.IsNullOrEmpty(_fileResource.DownloadUrl))
{
try
{
var x = _service.HttpClient.GetByteArrayAsync(_fileResource.DownloadUrl );
byte[] arrBytes = x.Result;
System.IO.File.WriteAllBytes(_saveTo, arrBytes);
return true;
}
catch (Exception e)
{
Console.WriteLine("An error occurred: " + e.Message);
return false;
}
}
else
{
// The file doesn't have any content stored on Drive.
return false;
}
}