经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » ASP.net » 查看文章
UWP 使用Windows Community Toolkit 的OneDrive service上传下载文件
来源:cnblogs  作者:星期八再娶你  时间:2018/9/25 20:41:58  对本文有异议

上一年年底写过两篇文章

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

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

 

没想到半年之后,VS编译提示方法已经过时了,可见微软朝三暮四,气走开发者的传言,并不假??????

 

不过新升级后的OneDrive service更加好用了,但是我没感觉出来??????

 

下面就来和大家分享一下新版的使用方法。

 

要把大象装,啊呸,哪有大象??了。要想使用OneDrive API,拢共分三步??‍

1. 注册应用程序ID

2. 授权程序功能

3. 使用OneDrive API

 

好吧,开始

 

1. 注册应用程序ID

去 https://apps.dev.microsoft.com/,在已聚合的应用旁边,选择添加应用,按照向导走,注意选择“Mobile and Desktop App”.

完成之后应该就有下图了。

注意记住这个应用ID,一会要用到。最好的办法就是收藏一下这个页面咯。

 

 

2. 授权程序功能

打开 Package.appxmanifest,进入“功能”页面,勾选   ?专用网络(客户端和服务端)。如图

 

 

3. 使用OneDrive API

 

3.0 下载NuGet包

打开NuGet,搜索Microsoft.Toolkit.Uwp.Services,安装3.0版本或以上。

 

友情提示:4.0还有可能会变哦

 

 

 

 

3.1 初始化

一句话搞定

  1. string[] scopes = new string[] { MicrosoftGraphScope.FilesReadWriteAppFolder};
    OneDriveService.Instance.Initialize("刚才申请的那个应用ID", scopes, null, null);

 

scopes是使用的权限,我的App只需要使用OneDrive下的应用程序文件夹,所以就是这个了。当然还有其它的权限,比如 Files.Read.All,Files.ReadWrite.All等,详见MicrosoftGraphScope下面的枚举。

 

 

3.2 登录

核心也是一句话

  1. if (await OneDriveService.Instance.LoginAsync())
  2. {
  3. OneDriveStorageFolder oneDriveAppFolder = await OneDriveService.Instance.AppRootFolderAsync();
  4. TipServices.TipAuthenticateSuccess();
  5. }
  6. else
  7. {
  8. TipServices.TipAuthenticateFail();
  9. throw new Exception("Unable to sign in");
  10. }

 

在登录成功后,我马上获取了OneDrive下面的应用程序文件夹。别的文件夹坚决不访问,不做流氓行为。坚决不向BAT看齐。

 

 

 3.3 获取文件

 循环获取

  1. var OneDriveItems = await folder.GetItemsAsync();
  2. do
  3. {
  4. OneDriveItems = await folder.NextItemsAsync();
  5. }
  6. while (OneDriveItems != null);

 

 

 

 3.4 创建文件夹

  1. string newFolderName = await OneDriveSampleHelpers.InputTextDialogAsync("New Folder Name");
  2. if (!string.IsNullOrEmpty(newFolderName))
  3. {
  4. await folder.StorageFolderPlatformService.CreateFolderAsync(newFolderName, CreationCollisionOption.GenerateUniqueName);
  5. }

 

 

3.5 进入子文件夹

  1. var currentFolder = await _graphCurrentFolder.GetFolderAsync(item.Name);
  2. OneDriveItemsList.ItemsSource = await currentFolder.GetItemsAsync(20);
  3. _graphCurrentFolder = currentFolder;

 

 

3.6 移动、复制、重命名项目

  1. await _onedriveStorageItem.MoveAsync(targetonedriveStorageFolder);
  2.  
  3. await _onedriveStorageItem.CopyAsync(targetonedriveStorageFolder);
  4.  
  5. await _onedriveStorageItem.RenameAsync("NewLevel3");

 

 

3.7 创建/上传小于4M的文件

  1. var selectedFile = await OpenLocalFileAsync();
  2. if (selectedFile != null)
  3. {
  4. using (var localStream = await selectedFile.OpenReadAsync())
  5. {
  6. var fileCreated = await folder.StorageFolderPlatformService.CreateFileAsync(selectedFile.Name, CreationCollisionOption.GenerateUniqueName, localStream);
  7. }
  8. }

 

 

 

3.8 创建/上传大于4M的文件

  1. var selectedFile = await OpenLocalFileAsync();
  2. if (selectedFile != null)
  3. {
  4. using (var localStream = await selectedFile.OpenReadAsync())
  5. {
  6. Shell.Current.DisplayWaitRing = true;
  7. // If the file exceed the Maximum size (ie 4MB)
  8. var largeFileCreated = await folder.StorageFolderPlatformService.UploadFileAsync(selectedFile.Name, localStream, CreationCollisionOption.GenerateUniqueName, 320 * 1024);
  9. }
  10. }
  11. }

 

至于为什么非要区分,而且是4M为分界线,我也不清楚。好像GayHub上讨论过,有兴趣可以去查下。

 

 

3.9 下载文件

  1. var oneDriveFile = (Toolkit.Services.OneDrive.OneDriveStorageFile)item;
  2. using (var remoteStream = (await oneDriveFile.StorageFilePlatformService.OpenAsync()) as IRandomAccessStream)
  3. {
  4. await SaveToLocalFolder(remoteStream, oneDriveFile.Name);
  5. }

 

 

3.10 获取缩略图

  1. var file = (Toolkit.Services.OneDrive.OneDriveStorageItem)((AppBarButton)e.OriginalSource).DataContext;
  2. using (var stream = (await file.StorageItemPlatformService.GetThumbnailAsync(Toolkit.Services.MicrosoftGraph.MicrosoftGraphEnums.ThumbnailSize.Large)) as IRandomAccessStream)
  3. {
  4. await OneDriveSampleHelpers.DisplayThumbnail(stream, "thumbnail");
  5. }

 

 

 关于OneDrive的API操作基本都在这了。

如果你觉得微软的OneDrive客户端非常渣渣,那么看完这个,你也完全可以写一个OneDrive 的App,然后发布到商店。

到时别忘记@我一下,我也用用。

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号