- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
代码在本地运行,但是当我尝试部署网站并尝试运行它时,它抛出异常:
Message":"An error has occurred.","ExceptionMessage":"Class not registered","ExceptionType":"System.ComponentModel.Win32Exception","StackTrace":" at Microsoft.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at Microsoft.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccess(Task task)\r\n at Google.Apis.Auth.OAuth2.GoogleWebAuthorizationBroker.d__1.MoveNext() in c:\code\google.com\google-api-dotnet-client\default_182\Tools\Google.Apis.Release\bin\Debug\output\default\Src\GoogleApis.Auth.DotNet4\OAuth2\GoogleWebAuthorizationBroker.cs:line 59
代码如下:
UserCredential credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
new ClientSecrets
{
ClientId = Settings.ClientId,
ClientSecret = Settings.ClientSecret,
},
new[] { DriveService.Scope.Drive },
"user",
CancellationToken.None,
new FileDataStore("MyStore")).Result;
var service = new DriveService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = "AppName",
});
File body = new File();
body.Title = fileName;
body.Description = "Body";
body.MimeType = "text/plain";
String dir = HttpContext.Current.Server.MapPath("~/App_Data");
byte[] byteArray = System.IO.File.ReadAllBytes(fileName);
System.IO.MemoryStream stream = new System.IO.MemoryStream(byteArray);
FilesResource.InsertMediaUpload request = service.Files.Insert(body, stream, "text/plain");
request.Upload();
如有任何帮助,我们将不胜感激。
更新:
我试着把代码改成这样:
var token = new TokenResponse { RefreshToken = "1/0i6iw4nsecXSVn1_OtYZVo7VCs24jKXdji6gVBrz3TM" };
var credential = new UserCredential(new GoogleAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer
{
ClientSecrets = new ClientSecrets
{
ClientId = Settings.ClientId,
ClientSecret = Settings.ClientSecret
},
Scopes = new[] { DriveService.Scope.Drive },
DataStore = new FileDataStore("MyStore")
}), "user", token);
它不会抛出异常,但文件不会上传。虽然创建了 MyStore 文件夹。我错过了什么吗?我还尝试实现此处发布的代码 http://www.daimto.com/google-oauth2-csharp/但它也不起作用。
最佳答案
首先:
'Class not registered'
向我暗示这是 dll 的问题。检查你的机器和服务器是 GAC 中的 .dll 吗?不,我不确定他们是否需要在 GAC 中,我猜我还没有测试过。我几乎记得我对此有过疑问,但那是不久前的事了。服务器上的 .net 版本怎么样?再次猜测。
第二:
您的代码正在调用 FileDataStore
,它将在 %appData%
中查找类似的内容。注意:文件名末尾的-user
与您发送的"user"
相同。因此,您要告诉它在该目录中查找具有该名称的文件。
%appData%\MyStore\Google.Apis.Auth.OAuth2.Responses.TokenResponse-user
您遇到的问题可能是它是一个网络服务器,该服务器可能无权创建文件,但我不是网络服务器专家,您可能想尝试咨询您的网络服务器管理员。
我个人建议您创建自己的 IDataStore
实现,我宁愿将 refreshTokens
存储在与用户帐户关联的数据库中。如果您决定这样做,您将能够像这样向它提供 refreshToken
:
//Now we load our saved refreshToken.
StoredResponse myStoredResponse = new StoredResponse(_RefreshToken);
//现在我们通过 StoredResponse 传递一个 SavedDatastore。
var credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
new ClientSecrets { ClientId = "YourClientId", ClientSecret = "YourClientSecret" },
new[] { DriveService.Scope.Drive,
DriveService.Scope.DriveFile },
"user",
CancellationToken.None,
new SavedDataStore(myStoredResponse)).Result; }
请注意我是如何使用 new SavedDataStore(myStoredResponse)
而不是 new FileDataStore("MyStore")
的。本教程有一个如何创建 SavedDataStore
的示例。此处发布的代码有点长。
请注意,在该教程的底部有一个示例项目运行它。是的,我承认它有点困惑,我应该更新那个示例项目。
第三
我不明白你的更新代码。我认为您无法创建自己的 UserCredential
。 UserCredential
在获得新的 AccessToken
后由 GoogleWebAuthorizationBroker.AuthorizeAsync
返回。它通过请求用户访问或使用 RefreshToken
为您提供一个新的 AccessToken
,它已经为您提供了一个新的。因此,除非您已经手动获得了自己的 AccessToken
或其他东西,否则我看不出这将如何成为您可以使用的有效 UserCredential
。
第四:
我觉得你要么是受到上面的压力,要么是你看这两个长了。退后一步,你的更新让我觉得你在绝望和捕获救命稻草。如果您仍然无法正常工作,请随时给我发电子邮件。
如果您确实在服务器管理员的帮助下使用 fileDatastore 让它工作,我也很想知道这一点以供将来引用。
关于c# - 无法将文件上传到 Google 云端硬盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24178823/
我创建了一个具有高级非托管磁盘配置的 Azure RM VM。我有 1 个 127GB 的操作系统磁盘和一个大小为 56GB 的临时磁盘。我的操作系统磁盘还包含 SQL Server 和 ShareP
我正在开发一个目录树比较工具,它可以跨多台计算机工作,通过 TCP 与其他实例通信。 该工具运行良好,但到目前为止一直依赖于可由用户更改的驱动器号和标签。可移动驱动器是另一个问题。 我想通过某种唯一的
我正在使用硬盘 ID 为我的软件生成许可证 key 。在我的机器中,我得到 15 个字符长度的 ID。所有制造商的硬盘 ID 的这个长度是恒定的还是在它们之间变化? 是否有任何公认的方法来解释硬盘 I
本文实例讲述了java实现获取cpu、内存、硬盘、网络等信息的方法。分享给大家供大家参考,具体如下: 1. 下载安装sigar-1.6.4.zip 使用java自带的包获取系统数据,容易找不到包
我正在探索将 Aerospike 作为键值数据库,并将数据存储在磁盘上以确保安全。请确认,我理解正确: 如果在命名空间配置中我设置: 存储引擎设备 内存大小4G 文件/opt/aerospike/da
看着海藻,想换minio。主要原因 - 海藻可以很容易地用任意数量的节点/磁盘扩大。 但是对我的基础设施有几个问题。现在我有 2 个节点,每个节点有 100 个硬盘(HPE CL5800),它们被包含
我目前正在编写一个 CUDA 应用程序,并且遇到了一些“喂养野兽”的 IO 问题。 我想知道是否有任何方法可以直接从 RAID Controller 或 NIC 读取数据并将该数据直接发送到 GPU。
如何衡量文件(硬盘)I/O 的特性?例如,在具有硬盘(速度 X)和 cpu i7(或任何数量的内核)和 Y 数量的 ram(使用 Z Hz BIOS)的机器上(在 Windows 操作系统上): 可以
就像标题一样,我在裸机主机上安装了 RancherOS 并且想要 动态处理外部 USB 硬盘的添加/移除。它应该可以作为其他容器的绑定(bind)挂载访问。 最佳答案 你可以这样做: # udev_c
我想实现以下目标。 这样做的目的是让用户能够从他/她的硬盘驱动器中选择一个文件。 而没有上传的原因当然是传输成本和存储配额。没有理由保存文件。 这可能吗? 最佳答案 可以播放本地视频文件。 当
我想实现以下目标。 这样做的目的是让用户能够从他/她的硬盘驱动器中选择一个文件。 而没有上传的原因当然是传输成本和存储配额。没有理由保存文件。 这可能吗? 最佳答案 可以播放本地视频文件。 当
对于这些实例,在 C++ 运行时,有人可以大致说明什么是什么(硬盘、RAM、堆栈或堆): 局部/全局变量 类、方法和函数 指针 对象 堆栈/堆是否都位于物理 RAM 中? 如果有人可以在答案中包含硬件
我是 Synology 的新手。我想要访问我的 Synology NAS 驱动器。我遵循 Synology_Download_Station_Official_API。 我阅读了基本工作示例以获取 A
我想知道Linux(特别是树莓派)是否可以实现将我的有线电视接收器连接到我的树莓派(主/从?)有线电视接收器认为树莓派是硬盘但同时允许网络中的客户端获取录制的电影(当然不是正在录制的电影) 我猜 WD
由于我在本地主机上构建了许多虚拟网络,并且 htdocs 文件夹中的数据每天都在增加。 我想将 htdocs 文件夹移动到外部硬盘,可以这样做吗? 我尝试编辑 httpd.conf 文件。但是当我打开
我是一名优秀的程序员,十分优秀!