以上就是在我的【微识别/WeRecognition】场景里面使用的实际代码分享

时间:2022-04-18 07:59:51

分析了数据漫游和OneDrive的优错误谬误,结合本身App实际需要,我选择了OneDrive。

终究数据漫游100KB不够用啊。。。

这一次给大家我千辛万苦找来的、非常简单的使用OneDrive 2.x api使用要领。

那就是隐藏在官方UWP Community Toolkit Sample App中的OneDrive Service中

以上就是在我的【微识别/WeRecognition】场景里面使用的实际代码分享

我感受平时我看这个App已经够多了,以前也瞄过一眼这个OneDrive Service,但是在真真使用它的时候,偏偏想不起来了。

我用过这里面的Grid Splitter、Markdown Textbox、RadialProgressBar、等等太多了

这是一个非常好的例子,商店有下载,gayhub也有源代码

不得不说,微软开发这个App的人员非常伟大了。。。哈哈哈??

下面就结合我本身的【微识别/WeRecognition】代码来和大家说一下。

1. 授权

要访谒OneDrive,首先需要授权。

授权有三种方法:

OnlineId,最简单,我就用这个,也是保举UWP开发者使用的


Microsoft account with client id

Work or school account with client id

private OneDriveStorageFolder _appFolder = null;这个用来获取OneDrive下面的应用文件夹

private async Task SigninAsync(int indexProvider = 0, string appClientId = null) { if (!IsInternetAvailable()) return; ShowBusy(true); try { // OnlineId if (indexProvider == 0) { OneDriveService.Instance.Initialize(); } //Microsoft account with client id else if (indexProvider == 1) { OneDriveService.Instance.Initialize(appClientId, AccountProviderType.Msa, OneDriveScopes.AppFolder | OneDriveScopes.ReadWrite); } //Work or school account with client id else if (indexProvider == 2) { OneDriveService.Instance.Initialize(appClientId, AccountProviderType.Adal); } if (await OneDriveService.Instance.LoginAsync()) { _appFolder = await OneDriveService.Instance.AppRootFolderAsync(); ShowBusy(false); } else { ShowBusy(false); throw new Exception("Unable to sign in"); } } catch (ServiceException serviceEx) { var dialog = new MessageDialog(serviceEx.Message, "Error!"); await dialog.ShowAsync(); ShowBusy(false); } catch (Exception ex) { var dialog = new MessageDialog(ex.Message, "Error!"); await dialog.ShowAsync(); ShowBusy(false); } finally { ShowBusy(false); } }

注意:用的时候,最好加上上面捕捉的那些异常,以防万一。

接下来无非就是,上传下载文件咯。【我没有做另外一些操纵,好比在OneDrive上新建文件(夹),或者缩略图等,你可以自行看阿谁App说明】

我不想把简单的工作搞得庞大,这个团队做的也是这样,能简单就简单。不信你上传的代码

上传

var size = await file.GetBasicPropertiesAsync(); if (size.Size >= 4 * 1024 * 1024) await OneDriveServiceHelper.UploadLargeFileAsync(file, strBackupName, CreationCollisionOption.WordStrExisting, _appFolder); else await OneDriveServiceHelper.UploadSimpleFileAsync(file, strBackupName, CreationCollisionOption.WordStrExisting, _appFolder);

不过这要区分一下是不是赶过4M,两种上传方法,,用我的代码判断一下即可。

具体为啥区分,请去看官方gayhub上面的Issues讨论。

两个函数的原型

UploadSimpleFileAsync

public static async Task UploadSimpleFileAsync(OneDriveStorageFolder folder) { try { if (folder != null) { var selectedFile = await OpenLocalFileAsync(); if (selectedFile != null) { using (var localStream = await selectedFile.OpenReadAsync()) { var fileCreated = await folder.CreateFileAsync(selectedFile.Name, CreationCollisionOption.GenerateUniqueName, localStream); } } } } catch (OperationCanceledException ex) { await OneDriveServiceHelper.DisplayMessageAsync(ex.Message); } catch (ServiceException graphEx) { await OneDriveServiceHelper.DisplayMessageAsync(graphEx.Error.Message); } catch (Exception ex) { await OneDriveServiceHelper.DisplayMessageAsync(ex.Message); } finally { } }

UploadLargeFileAsync