UWP 使用OneDrive云存储2.x api(二)【全网首发】

上一篇提到为了给用户打造一个完全无缝衔接的最佳体验,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流程如下 

  1. 注册应用以获取应用 ID。
  2. 使用令牌流或代码流通过指定的作用域让用户登录。就是上面的 SigninAsync函数
  3. 上传下载操作
  4. 注销用户(可选)。

 

 

 

以上就是在我的【微识别/WeRecognition】场景里面使用的实际代码分享,如有不足之处,敬请指正。谢谢。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/439158.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在Sharepoint 2010中使用ReportViewer控件展示RDLC报表

微软的Visual studio提供了ReportViewer控件以及RDLC报表设计工具。下文主要介绍如何在Sharepoint 2010项目开发中使用ReportViewer和RDLC生成项目报表。由于Sharepoint 2010默认是禁用Session的,而RDLC报表必须启用Session。因此在Sharepoint的站点中要使用RDLC生成…

工作篇-佛山三水恒大-2020.11.13

** 工作篇-佛山三水恒大-2020.11.14 **TAG:此篇文章估计会很长,因为工作的时候变数太多了,预计五千字左右,想看的可以耐心看完,均为个人实战经验.害,其实是上学期间请假去做的,还挨批了. **到了现场tm的那个机房,小到我哭,站都没地方站,刚装修好全tm都是白灰,我穿的一身黑衣…

Windows Workflow Foundation(WWF)介绍

Windows Workflow Foundation:支持基于工作流的应用程序 工作流是一个简单思路:按照特定顺序执行的一系列步骤。您甚至可以认为每个应用程序都在执行工作流,因为每个应用程序都执行某些过程。但是,在使用 C#、Visual Basic 或其他…

CCNA-第五篇-基础命令集+设备升级+设备破解密码+IP地址{精髓篇}

** CCNA-第五篇-基础命令集 ** 1.基础命令集 思科设备 : IOS 华为设备: VRP 启动步骤:加电自检-加载系统(IOS/VRP)-运行配置(保留的cfg或者conf文件) 命令行统一称为CLI,CLI是啥呢,命令 简介:CLI一般指命令行界面。…

你还记得windows workflow foundation吗

很多年前,windows workflow foundation还叫WWF,而直译过来的名称让很多人以为它就是用来开发工作流或者干脆就是审批流的。 博主当年还是个懵懂的少年,却也知道微软不会大力推一个面向如此具象的业务场景的技术,于是特地找了一本…

SharePoint Desiger编辑模板时提示“服务器错误,拒绝访问”的解决之道

这篇文件已被微软收藏。http://technet.microsoft.com/zh-cn/ff683721.aspx各位同志好,很多同志都用过SharePoint designer来编辑模板。经常出现“服务器错误,拒绝访问”。场景描述:我们办公电脑是XP系统。XP系统我们是用自己的域用户名密码登…

CCIE理论-第六篇-SD-WAN网络(一)

** CCIE理论-第六篇-SD-WAN网络 ** 1.SD-WAN介绍 1.什么是SD-WAN SD-WAN Software Defined 软件定义WANWide Area Network 广域网外网通俗的说企业网关可以慢慢的代替传统组网(大趋势)主要作用,省钱,简单,智能.易管理 传统方式 -Internet专线 (固定IP上下行带宽对等) -PPPOE …

【转】TFS测试管理

微软2010年发布的Visual Studio 2010或Visual Studio Test Professional 2010包含一个称为 Microsoft 测试管理器的新应用程序,用于帮助您使用测试计划来定义和管理测试工作。 Microsoft 测试管理器通过Team Foundation Server 集成,使您可以方便地进行测…

CCNA-网络常用工具介绍篇

链接:https://pan.baidu.com/s/1Mo3B9LR6YF4YfzSkMwn5OA 提取码:7dc7 这是免费提供滴工具,虽然其实都能用到,不过也就发发了. 第一个呢是EVE,是基于VM下的,就是模拟器来的.里面有ova直接拉进去vm里面开机就可以使用了.前面好像也发过 第二个是ENSP,是华…

敏捷项目管理过程改进

一、为什么敏捷? 目前大环境智慧城市、人工智能、大数据,面向To B的业务等,在要求产品管理需要快速的需求响应,项目管理需要更强的整合协调。复杂的大环境,就在推动我们用最敏捷的方式迎接这个多变的市场。 二、传统和…

CCNA-第六篇-静态路由+动态路由开头

** CCNA-第六篇-静态路由动态路由 ** 一,路由概念 什么是路由? 路由呢,应该说是除了IP以外在网络世界中最重要的东西了 万物互联,互联网,都是基于路由的,前期的啥静态动态,后期的MPLS,包括看到的VPN,虚拟专线等.都是基于路由的,就是像建房子那样,你最得把地基打好才能做其…

【转】敏捷开发,你真的做对了吗?

缘起 2017年3月,应移动事业群智能营销平台项目管理部负责人邀请,我开始支持智能营销平台CRM团队。智能营销平台是阿里文娱广告团队,是阿里巴巴淘外变现的主力军。CRM团队负责开发和维护CRM系统。CRM系统服务于销售和代理商,串起商…

CCNA-第七篇-思科私有路由协议-EIGRP-初级

CCNA-第七篇-思科私有路由协议-EIGRP 首先呢这个EIGRP之前呢, 路由协议是分几种的 一个叫距离向量协议RIP,IGRP(都过时了) 一个觉链路状态协议OSPF,IS-IS这些 还有个叫混合型的EIGRP 但是呢,这些只是书本上的定义,实际上没人会跟你说这个东东 这个怎么区分呢? 第一个呢,只传递…

CCNA-第八篇-OSPF-上

CCNA-第八篇-OSPF OSPF,最常用的路由协议,他来了他来了 OSPF呢怎么说呢 是一个比较重要而且比较基础的点,出到去外面要是说不会OSPF,那还算啥网络工程师 但是呢,他也不是那么的完全重要.因为很多小地方压根就用不到.但是列你不能不会呀 到了OSPF呢,配置就会逐渐的多那么一点点…

CCNA-第九篇-OSPF下+VLAN开篇初介绍

CCNA-第九篇-OSPF下VLAN开篇初介绍 补充一下官网的PPT对于DR/BDR的描述 邻居-drothers 和drothers之间的关系–2WAY 彼此之间只会交换hello包来让邻居正常通信,不交换LSA 邻接-dr/bdr/drothers的关系,-FULL 交换hello包与LSA信息 224.0.0.5-公用 224.0.0.6-仅有DR/BDR监听 其…

CCNA-第十篇-VLAN-下

CCNA-第十篇-VLAN-下 讲真,这个技术点没啥好讲的,很好理解.也很基础 通俗的说就是一个框框. . 其实理论上来说呢,CCNA是应该先教交换的再到路由的,哈哈,不过倒过来了,倒就倒吧.这里开始讲交换技术 LAN-内网 WAN-外网 VLAN虚拟局域网(一般用于内网) 交换机可以转发广播数据…

Office Web Apps安装部署(一)

系统要求为Windows Server 2012, 注意:安装Office Web Apps的服务器除了Office Web Apps之外,不能安装其他应用。包括不能安装Office,lync,,sharepoint等应用,即要单独部署。 安装IIS 7.0 打开服务器管理…

CCNA-第十一篇-VTP+STP(上)

CCNA-第十一篇-VTPSTP(上) VTP:VLAN中继协议(VLAN Trunking protocol )利用第2层中继帧,在一组交换机之间进行VLAN通信 STP:生成树,交换机的冗余协议 MSTP:多实例生成树,STP的进化版本. 然后先说说上次接口 思科有2种,华为有3种 access,t…

Office Web Apps安装部署(二)

SharePoint 2013调用Office Web Apps 注意:调用OfficeWebApps的sharepoint应用的身份认证必须是基于声明的身份认证(claims-based authentication) 首先安装好SharePoint2013,我在此部署文档中使用的是免费的sharepiont foundat…

CCNA-第十二篇-STP+ACL(下)

CCNA-第十二篇-STPACL(下) 首先说说要跳跳了 立个小FLAG, 两个月内急速完成CCIE理论LAB实操 因为接了个工作,主要我能做到就能做这份工作. 其实NP中间的点很多都会,只是因为笔记弄不急了, 就放到CSDN上重新复习学习一次. 下几篇开始就要起飞到CCIE了 后面还有个NAT还有一点SDN…