Pick up an article on http://www.cnblogs.com/hupo376787/p/8032146.html
The previous article mentions that in order to create a completely seamless and optimal experience for users, UWP developers should also implement app settings and data across platforms
Analyzing the pros and cons of data roaming and OneDrive, I chose OneDrive in combination with the actual needs of your app.
After all, data roaming 100KB is not enough ...
This time for everyone I've been looking for, very simple use of the OneDrive 2.x API usage method.
That is hidden in the OneDrive service in the official UWP Community Toolkit Sample app
I think I've had enough of this app, and I've been looking at this OneDrive Service before, but I can't remember when I really used it.
I've used the grid Splitter, Markdown Textbox, Radialprogressbar, and so much more.
This is a very good example, the store has the download, Gayhub also has the source code
I have to say that the people who developed this app are very great ... Haha??
Here is a combination of my own "micro-identification/werecognition" code to talk to you.
1. Authorization
To access OneDrive, you first need authorization.
There are three ways of authorizing:
Onlineid, the simplest, I use this, is also recommended for UWP developers to use
Microsoft account with Client ID
Work or school account with client ID
Private Onedrivestoragefolder _appfolder = null; This is used to get the app folder under OneDrive
Private AsyncTask Signinasync (intIndexprovider =0,stringAppclientid =NULL) { if(!isinternetavailable ())return; Showbusy (true); Try { //Onlineid if(Indexprovider = =0) {OneDriveService.Instance.Initialize (); } //Microsoft account with Client ID Else if(Indexprovider = =1) {OneDriveService.Instance.Initialize (Appclientid, Accountprovidertype.msa, Onedri Vescopes.appfolder|onedrivescopes.readwrite); } //Work or school account with client ID Else if(Indexprovider = =2) {OneDriveService.Instance.Initialize (Appclientid, Accountprovidertype.adal); } if(awaitOneDriveService.Instance.LoginAsync ()) {_appfolder=awaitOneDriveService.Instance.AppRootFolderAsync (); Showbusy (false); } Else{showbusy (false); Throw NewException ("unable to sign in"); } } Catch(serviceexception Serviceex) {varDialog =NewMessagedialog (Serviceex.message,"error!"); awaitdialog. Showasync (); Showbusy (false); } Catch(Exception ex) {varDialog =NewMessagedialog (ex. Message,"error!"); awaitdialog. Showasync (); Showbusy (false); } finally{showbusy (false); } }
Note: When used, it is best to add the above-caught exceptions, just in case.
The next thing is, upload the download file. "I didn't do anything else, like creating a new file (clip) on OneDrive, or a thumbnail, etc., you can see the app description yourself"
I don't want to complicate simple things, and the team does the same thing, and it's easy to do. Don't believe the code you uploaded
Upload
varawait file. Getbasicpropertiesasync (); if 4 1024x768 1024x768 ) await onedriveservicehelper.uploadlargefileasync (file, Strbackupname, Creationcollisionoption.replaceexisting, _appfolder); Else await Onedriveservicehelper.uploadsimplefileasync (file, Strbackupname, creationcollisionoption.replaceexisting, _ Appfolder);
But this is to distinguish whether it is more than 4M, two ways of uploading, using my code to judge.
For details, please see the issues discussion above the official Gayhub.
Two prototypes of functions
Uploadsimplefileasync
Public Static AsyncTask Uploadsimplefileasync (Onedrivestoragefolder folder) {Try { if(Folder! =NULL) { varSelectedfile =awaitOpenlocalfileasync (); if(Selectedfile! =NULL) { using(varLocalstream =awaitSelectedfile.openreadasync ()) { varfilecreated =awaitfolder. Createfileasync (Selectedfile.name, Creationcollisionoption.generateuniquename, Localstream); } } } } Catch(OperationCanceledException ex) {awaitOnedriveservicehelper.displaymessageasync (ex. Message); } Catch(serviceexception graphex) {awaitOnedriveservicehelper.displaymessageasync (graphEx.Error.Message); } Catch(Exception ex) {awaitOnedriveservicehelper.displaymessageasync (ex. Message); } finally { } }
Uploadlargefileasync
Public Static AsyncTask Uploadlargefileasync (Onedrivestoragefolder folder) {Try { if(Folder! =NULL) { varSelectedfile =awaitOpenlocalfileasync (); if(Selectedfile! =NULL) { using(varLocalstream =awaitSelectedfile.openreadasync ()) { //If The file exceed the Maximum size (ie 4MB) varlargefilecreated =awaitFolder. Uploadfileasync (Selectedfile.name, Localstream, Creationcollisionoption.generateuniquename, the*1024x768); } } } } Catch(OperationCanceledException ex) {awaitOnedriveservicehelper.displaymessageasync (ex. Message); } Catch(serviceexception graphex) {awaitOnedriveservicehelper.displaymessageasync (graphEx.Error.Message); } Catch(Exception ex) {awaitOnedriveservicehelper.displaymessageasync (ex. Message); } finally { } }
You may have noticed that the official function parameters are different from mine, yes. I re-encapsulated it.
The official is var selectedfile = await Openlocalfileasync (), and the file needs to be selected manually. In my scene, is automatically select the database file upload, let the user choose, it is not appropriate
Download
varRemoteFile =await_appfolder.getfileasync (strbackupname); using(varRemotestream =awaitRemotefile.openasync ()) { byte[] buffer =New byte[Remotestream.size]; varLocalbuffer =awaitRemotestream.readasync (buffer. Asbuffer (), (UINT) remotestream.size, inputstreamoptions.readahead); varLocalfolder =ApplicationData.Current.LocalFolder; varMylocalfile =awaitLocalfolder.createfileasync (Sqlitehelper.facedbname, creationcollisionoption.replaceexisting);using(varLocalstream =awaitMylocalfile.openasync (Fileaccessmode.readwrite)) { awaitLocalstream.writeasync (Localbuffer); awaitLocalstream.flushasync ();Tipservices.tipdatadownloadfromcloudcomplete (); }
Download does not differentiate what size file, very simple
=================================================================================
Summarize
The UWP was originally a small audience, the information is few, I went through the pit, recorded, for the future use of OneDrive development help.
Using the OneDrive API 2.x process is as follows
- Register the app to get the app ID.
- use a token stream or code to flow through the specified scope to let the user log in. is the Signinasync function above.
- Upload download operation
- Log off the user (optional).
The above is the actual code share used in my "micro-recognition/werecognition" scene, if there are deficiencies, please correct me. Thank you.
UWP uses the OneDrive cloud storage 2.x API (ii) "All-network debut"