UWP 使用Windows Community Toolkit 的OneDrive service上傳下載檔案

來源:互聯網
上載者:User

標籤:基本   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上傳下載檔案

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.