使用Google Drive .NET API创建文件的空响应
问题描述:
我试图使用Google Drive .NET API v3将文件上传到我的云端硬盘。我的代码是低于使用Google Drive .NET API创建文件的空响应
static string[] Scopes = { DriveService.Scope.Drive,
DriveService.Scope.DriveAppdata,
DriveService.Scope.DriveFile,
DriveService.Scope.DriveMetadataReadonly,
DriveService.Scope.DriveReadonly,
DriveService.Scope.DriveScripts };
static string ApplicationName = "Drive API .NET Quickstart";
public ActionResult Index()
{
UserCredential credential;
using (var stream =
new FileStream("C:/Users/admin1/Documents/visual studio 2017/Projects/TryGoogleDrive/TryGoogleDrive/client_secret.json", FileMode.Open, FileAccess.Read))
{
string credPath = 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;
Debug.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 = 10;
listRequest.Fields = "nextPageToken, files(id, name)";
// List files.
IList<Google.Apis.Drive.v3.Data.File> files = listRequest.Execute()
.Files;
Debug.WriteLine("Files:");
if (files != null && files.Count > 0)
{
foreach (var file in files)
{
Debug.WriteLine("{0} ({1})", file.Name, file.Id);
}
}
else
{
Debug.WriteLine("No files found.");
}
var fileMetadata = new Google.Apis.Drive.v3.Data.File()
{
Name = "report.csv",
MimeType = "text/csv",
};
FilesResource.CreateMediaUpload request;
using (var stream = new FileStream("C:/debugging/report.csv",
FileMode.Open))
{
request = service.Files.Create(
fileMetadata, stream, "text/csv");
request.Fields = "id";
request.Upload();
}
var response = request.ResponseBody;
Console.WriteLine("File ID: " + response.Id);
return View();
}
我面临的问题是,响应始终为空。我仔细研究了一下,发现请求返回了403 resultCode。我还看了一些关于SO this和this的其他问题,但都没有任何帮助。
编辑:我忘了提及代码的第一部分工作正常 - 它列出了我的驱动器中的所有文件。只有第二部分不工作(上传文件部分)
答
尝试访问从ASP.NET论坛this post。
因为您正在使用.net在Google云端硬盘中上传文件,所以与您在应用中执行的操作相同。
您可以尝试直接调用REST API来实现您的要求:
The quickstart from .net将帮助您从/到驱动器API发出请求。
的驱动器API允许你上传的文件数据时create或 updating一个File资源。
可以在以下任一方式发送上传请求:
- 简单的上传:
uploadType=media
。快速传输小文件(5 MB或更少)。要执行简单的上传,请参阅Performing a Simple Upload.- 分段上传:
uploadType=multipart
。为了快速传输小文件(5 MB或更少)和描述文件的元数据,全部在 单一请求中。要执行分段上传,请参阅Performing a Multipart Upload。- 可恢复上传:
uploadType=resumable
。为了更可靠的传输,对于大文件尤其重要。对于大多数应用程序来说,可恢复的上传文件是 是一个不错的选择,因为它们还可以为每个上传的一个附加HTTP请求付出代价的小文件 。要 执行可恢复的上载,请参阅Performing a Resumable Upload。
您可以尝试对上传样本文件从documentation此代码。
var fileMetadata = new File()
{
Name = "photo.jpg"
};
FilesResource.CreateMediaUpload request;
using (var stream = new System.IO.FileStream("files/photo.jpg",
System.IO.FileMode.Open))
{
request = driveService.Files.Create(
fileMetadata, stream, "image/jpeg");
request.Fields = "id";
request.Upload();
}
var file = request.ResponseBody;
Console.WriteLine("File ID: " + file.Id);
您可以检查在这documentation可能遇到的错误。
答
看看request.Upload()
返回什么。对我来说,当我有这个问题,它返回:
没有足够的权限错误[消息[没有足够的权限]地址[ - ]
我改变了我的范围从DriveService.Scope.DriveReadonly
到DriveService.Scope.Drive
和我在生意。