码迷,mamicode.com
首页 > 编程语言 > 详细

UWP 使用Windows Community Toolkit 的OneDrive service上传下载文件

时间:2018-06-27 00:53:27      阅读:279      评论:0      收藏:0      [点我收藏+]

标签:基本   login   list   nuget   gis   3.3   pes   syn   appbar   

上一年年底写过两篇文章

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,然后发布到商店。

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

 

UWP 使用Windows Community Toolkit 的OneDrive service上传下载文件

标签:基本   login   list   nuget   gis   3.3   pes   syn   appbar   

原文地址:https://www.cnblogs.com/hupo376787/p/9231842.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!