MicrosoftGraphScope

小说:既然选择了远方,那只能风雨兼程作者:建石陵更新时间:2019-03-21字数:48172

上一年年底写过两篇文章

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 初始化

一句话搞定

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 登录

核心也是一句话

if (await OneDriveService.Instance.LoginAsync())
                {
                    OneDriveStorageFolder oneDriveAppFolder = await OneDriveService.Instance.AppRootFolderAsync();
                    TipServices.TipAuthenticateSuccess();
                }
                else
                {
                    TipServices.TipAuthenticateFail();
                    throw new Exception("Unable to sign in");
                }

 

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

 

 

 3.3 获取文件

 循环获取

var OneDriveItems = await folder.GetItemsAsync();
do
{
    OneDriveItems = await folder.NextItemsAsync();
}
while (OneDriveItems != null);

 

 

 

 3.4 创建文件夹

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

 

 

3.5 进入子文件夹

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

 

 

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

await _onedriveStorageItem.MoveAsync(targetonedriveStorageFolder);

await _onedriveStorageItem.CopyAsync(targetonedriveStorageFolder);

await _onedriveStorageItem.RenameAsync("NewLevel3");

 

 

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

var selectedFile = await OpenLocalFileAsync();
if (selectedFile != null)
{
    using (var localStream = await selectedFile.OpenReadAsync())
    {
        var fileCreated = await folder.StorageFolderPlatformService.CreateFileAsync(selectedFile.Name, CreationCollisionOption.GenerateUniqueName, localStream);
    }
}

 

 

 

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

var selectedFile = await OpenLocalFileAsync();
if (selectedFile != null)
    {
        using (var localStream = await selectedFile.OpenReadAsync())
        {
            Shell.Current.DisplayWaitRing = true;

            // If the file exceed the Maximum size (ie 4MB)
            var largeFileCreated = await folder.StorageFolderPlatformService.UploadFileAsync(selectedFile.Name, localStream, CreationCollisionOption.GenerateUniqueName, 320 * 1024);
        }
    }
}

 

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

 

 

3.9 下载文件

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

 

 

3.10 获取缩略图

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

 

 

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

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

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

 

当前文章:http://leetaemin.cn/list_33509.html

发布时间:2019-03-21 11:49:03

0-3岁婴幼儿心理动力发展图,爸爸妈妈必须收藏 男女交往最忌讳的是什么? 《鬼谷子七十二术》全解 原创:面对灾难最好的帮助—陪伴篇 无爱的婚姻值得守一辈子吗? “情绪识别”就是“安全教育” 如何毁掉一个喜欢你的女孩 给爱的女人买对的礼物到底有多重要 终于找到适合自己的学习方法 朋友没有绝对的

52790 28271 25462 54221 74687 89156 46147 68888 30113 96178 18866 63811 80932 42570 84569 96432 85526 79200 85709 91096 83615 49120 73599

我要说两句: (0人参与)

发布