如何通过控制台应用程序将文件上载到OneDrive

本文关键字:上载 OneDrive 文件 何通过 控制台 应用程序 | 更新日期: 2023-09-27 18:20:37

我正在尝试从控制台应用程序中将文件上载到OneDrive。在谷歌上搜索了一点之后,我找到了Live SDK,但我找不到任何演示使用Live SDK逐步上传文件的文章。有什么好的资源可以解释如何做到这一点吗?谢谢

如何通过控制台应用程序将文件上载到OneDrive

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异常。

顺便说一句,有一件有趣的事情是,他们所有的代码示例并不是说,如果你使用的是本机(控制台)应用程序,你不需要指定客户端机密。