如何通过控制台应用程序将文件上载到OneDrive
本文关键字:上载 OneDrive 文件 何通过 控制台 应用程序 | 更新日期: 2023-09-27 18:20:37
我正在尝试从控制台应用程序中将文件上载到OneDrive。在谷歌上搜索了一点之后,我找到了Live SDK,但我找不到任何演示使用Live SDK逐步上传文件的文章。有什么好的资源可以解释如何做到这一点吗?谢谢
LiveSDK有许多托管在Github上的示例和模板代码,https://github.com/liveservices/LiveSDK-for-Windows.
要查看上传失败的示例,您可以浏览位于的示例应用程序https://github.com/liveservices/LiveSDK-for-Windows/blob/master/src/Desktop/Samples/ApiExplorer/MainForm.cs#L259
以下是ApiExplorer示例应用程序的一个片段:
OpenFileDialog dialog = new OpenFileDialog();
Stream stream = null;
dialog.RestoreDirectory = true;
if (dialog.ShowDialog() != DialogResult.OK)
{
throw new InvalidOperationException("No file is picked to upload.");
}
try
{
if ((stream = dialog.OpenFile()) == null)
{
throw new Exception("Unable to open the file selected to upload.");
}
using (stream)
{
return await this.liveConnectClient.UploadAsync(path, dialog.SafeFileName, stream, OverwriteOption.DoNotOverwrite);
}
}
catch (Exception ex)
{
throw ex;
}
如果您想完全避免用户交互,并且仍然在控制台应用程序中使用onedrive api,则必须实现自定义逻辑。
首先,您需要将Main方法标记为[STAThread](单线程单元模块):
[STAThread]
static void Main(string[] args)
{
//...
}
之后,在运行时创建WebBrowser控件(需要WinForms引用)。
将DocumentCompleted事件添加到WebBrowser,然后注入您的JavaScript,以便自动填写登录表单并模拟登录按钮单击,并在相同的方法中检查WebBrowser url是否为ReturnUrl。如果是,则解析授权代码,并继续获取访问和刷新令牌。
setInterval(function(){
//your code to interact with ui
}, 1000);
别忘了放一些代码拦截器,比如:
while (!_autoLoginCompleted)
{
Application.DoEvents();
Thread.Sleep(100);
}
导航到https://login.microsoftonline.com/common/oauth2/authorize使用适当的参数(clientId、returnUrl)来触发DocumentCompleted事件。
之后,您可以存储这些令牌,稍后使用它们,并定期刷新它们。
您可能还需要抑制JS异常。
顺便说一句,有一件有趣的事情是,他们所有的代码示例并不是说,如果你使用的是本机(控制台)应用程序,你不需要指定客户端机密。