我正在尝试使用asp.net应用程序中的Google Drive API上传文件。
问题:代码在本地工作,但上传到服务器时没有任何反应(页面只是继续加载...没有同意屏幕显示。帮助appreaciated。 “UploadedPdf”文件夹是可写的,client_secrets.json存在于该文件夹中。
注意:我没有在服务器上安装任何内容,只是将包含Google API dll的所有文件上传到服务器的bin文件夹中。
UserCredential credential;
using (var filestream = new FileStream(Server.MapPath("UploadedPdf/client_secrets.json"),
FileMode.Open, FileAccess.Read))
{
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(filestream).Secrets,
new[] { DriveService.Scope.Drive },
"user",
CancellationToken.None,
new FileDataStore(Server.MapPath("UploadedPdf/"))).Result;
}
// Create the service.
var service = new DriveService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = "Drive API Sample",
});
Google.Apis.Drive.v2.Data.File body = new Google.Apis.Drive.v2.Data.File();
body.Title = "My document";
body.Description = "A test document";
body.MimeType = "text/plain";
byte[] byteArray = System.IO.File.ReadAllBytes(Server.MapPath("UploadedPdf/sample.txt"));
System.IO.MemoryStream stream = new System.IO.MemoryStream(byteArray);
FilesResource.InsertMediaUpload request = service.Files.Insert(body, stream, "text/plain");
request.Upload();
Google.Apis.Drive.v2.Data.File file = request.ResponseBody;
答案 0 :(得分:2)
FileDatastore默认将文件放在%appData%中。通常我会做类似的事情。 (假设我使用"用户"以及)
undefined
然后当我调用它时,我得到一个名为
的目录new FileDataStore("Console.Analytics.Auth.Store")
该目录中的现在存在一个名为
的文件%AppData%\Roaming\Console.Analytics.Auth.Store
我还没有测试过做什么
Google.Apis.Auth.OAuth2.Responses.TokenResponse-user
会做,但我的猜测是你要得到一个名为
的目录new FileDataStore(Server.MapPath("UploadedPdf/"))
我不认为你是在追求什么。如果这实际上是你想要做的那样你已经使该目录可写?您可能希望改为使用LocalFileDataStore。
我不确定这是不是你的问题。
还记得你是硬编码"用户"所以从技术上讲,你的代码会要求你为" user"进行一次身份验证。之后,它在该文件中对" user"进行了身份验证。所以没有理由再次要求它。
答案 1 :(得分:0)
我认为你正在调用AuthorizeAsync()错误。使用await关键字并远程使用.Result。为了做到这一点,你必须将方法标记为异步。
我还建议使用UploadAsync()方法。您不需要使用ReadAllBytes()将整个文件加载到内存中。只需使用File.OpenRead()并传递FileStream而不是MemoryStream。
Google有一些示例代码: https://developers.google.com/api-client-library/dotnet/guide/media_upload
答案 2 :(得分:0)
您的代码表明您正在使用"已安装的应用程序"工作流/凭据,如果您在本地运行ASP.NET应用程序,它应该可以正常工作。但是,当您将相同的代码移动到Web服务器时,它不再是已安装的应用程序。它进入了#34; Web Application"的类别。
您需要转到 Google Developer Console->凭据 - >创建新客户ID ,并为您的网络应用生成一组新的凭据。您还需要根据本指南更改OAuth流程:
https://developers.google.com/api-client-library/dotnet/guide/aaa_oauth#web-applications-aspnet-mvc
答案 3 :(得分:0)
步骤包括
1)Access to the internet and a web browser, in order to authorize the sample app.
2)A Google account with Drive enabled.
3)An environment to run programs in your selected language.
试试这个,
https://developers.google.com/drive/v2/reference/files/insert#examples