网站建设优化制作公司网站注册建设
news/
2025/9/23 4:10:41/
文章来源:
网站建设优化制作公司,网站注册建设,网站开发非常之旅:ajax从入门到精通 pdf,邯郸公司起名上一篇提到为了给用户打造一个完全无缝衔接的最佳体验#xff0c;UWP开发者最好也要实现App设置和数据的跨平台
分析了数据漫游和OneDrive的优缺点#xff0c;结合自己App实际需要#xff0c;我选择了OneDrive。
毕竟数据漫游100KB不够用啊。。。 这一次给大家我千辛万苦找…上一篇提到为了给用户打造一个完全无缝衔接的最佳体验UWP开发者最好也要实现App设置和数据的跨平台
分析了数据漫游和OneDrive的优缺点结合自己App实际需要我选择了OneDrive。
毕竟数据漫游100KB不够用啊。。。 这一次给大家我千辛万苦找来的、非常简单的使用OneDrive 2.x api使用方法。
那就是隐藏在官方UWP Community Toolkit Sample App中的OneDrive Service中 我觉得平时我看这个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{// OnlineIdif (indexProvider 0){OneDriveService.Instance.Initialize();}//Microsoft account with client idelse if (indexProvider 1){OneDriveService.Instance.Initialize(appClientId, AccountProviderType.Msa, OneDriveScopes.AppFolder | OneDriveScopes.ReadWrite);}//Work or school account with client idelse 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.ReplaceExisting, _appFolder);elseawait OneDriveServiceHelper.UploadSimpleFileAsync(file, strBackupName, CreationCollisionOption.ReplaceExisting, _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
public static async Task UploadLargeFileAsync(OneDriveStorageFolder folder){try{if (folder ! null){var selectedFile await OpenLocalFileAsync();if (selectedFile ! null){using (var localStream await selectedFile.OpenReadAsync()){// If the file exceed the Maximum size (ie 4MB)var largeFileCreated await folder.UploadFileAsync(selectedFile.Name, localStream, CreationCollisionOption.GenerateUniqueName, 320 * 1024);}}}}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{}} 你可能注意到了官方的函数参数和我用的不一样是的。我重新封装了。
官方的是var selectedFile await OpenLocalFileAsync();需要手动选择文件。在我的场景里面是自动选择数据库文件上传的让用户选择就不合适了 下载 var remoteFile await _appFolder.GetFileAsync(strBackupName);using (var remoteStream await remoteFile.OpenAsync()){byte[] buffer new byte[remoteStream.Size];var localBuffer await remoteStream.ReadAsync(buffer.AsBuffer(), (uint)remoteStream.Size, InputStreamOptions.ReadAhead);var localFolder ApplicationData.Current.LocalFolder;var myLocalFile await localFolder.CreateFileAsync(SQLiteHelper.FaceDbName, CreationCollisionOption.ReplaceExisting);
using (var localStream await myLocalFile.OpenAsync(FileAccessMode.ReadWrite)){await localStream.WriteAsync(localBuffer);await localStream.FlushAsync();TipServices.TipDataDownloadFromCloudComplete();} 下载不区分什么大小文件很简单的 总结
UWP本来就是小众资料少之又少我走过了坑记录下来对以后用到OneDrive 开发的有所帮助。
使用OneDrive Api 2.x流程如下
注册应用以获取应用 ID。使用令牌流或代码流通过指定的作用域让用户登录。就是上面的 SigninAsync函数上传下载操作注销用户可选。以上就是在我的【微识别/WeRecognition】场景里面使用的实际代码分享如有不足之处敬请指正。谢谢。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/911319.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!