原文出自:http://www.bcmeng.com/onedrive/

小梦今天给大家分享一下windows phone 8.1开发 onedrive中的一些操作:

  • Windows phone 8.1 中 onedrive 登录
  • Windows phone 8.1 中 onedrive 文件/照片上传,更新
  • Windows phone 8.1 中 onedrive文件/照片下载
  • Windows phone 8.1 中 onedrive文件夹建立,删除,移动,复制
  • Windows phone 8.1 中 onedrive的一些关键概念

最后有源代码。

Windows phone 8.1的Live SDK下载:

进入  http://msdn.microsoft.com/onedrive/dn630256  页面 选择 适用于 Windows、Windows Phone 和 .NET 的 Live SDK 下载 ,安装即可。安装后再引用 Live SDK 。别急,还没完。

将应用程序和应用商店关联:

在工具栏 应用商店中选择 将应用程序和应用商店关联 。按着提示完成即可。好了,下来就然我们正式开始吧。

Windows phone 8.1 中 onedrive 登录:

好了,先上代码,我们在慢慢解释

 LiveLoginResult result;
private async void loginButton_Click(object sender, RoutedEventArgs e)//登录
{
try
{
msgText.Text = "亲:正在登录"; var authClient = new LiveAuthClient();//初始化,用来获取用户数据。
result = await authClient.LoginAsync(new string[] { "wl.signin", "wl.skydrive", "wl.skydrive_update", "wl.photos" });
//登录,里面的参数是 Scopes
if (result.Status == LiveConnectSessionStatus.Connected)
{ var connectClient = new LiveConnectClient(result.Session);
var meResult = await connectClient.GetAsync("me");
msgText.Text = "亲爱的:" + meResult.Result["name"].ToString() + " 您已成功登录OneDrive!";
} }
catch (LiveAuthException ex)
{
msgText.Text = ex.Message;
}
catch (LiveConnectException ex)
{
msgText.Text = ex.Message;
}
}

Scopes:

Scopes 翻译为域 。意思是授权允许应用获取用户的哪些数据。

域分为核心域和扩展域:

核心域包括:

wl.basic :获取用户的基本信息,也可以获得用户的联系人。

wl.offline_access:可以任何时候读取和更新用户数据。

wl.signin:单点登录。即只要用户已经登录,只需用户授权即可,不需再次登录。在windows phone 上推荐使用。

扩展域:

扩展域很多,常用的主要有:

wl.photos:授权获取用户的图片,视频,唱片集,音频等。

wl.skydrive:读取用户在onedrive 上存储的文件

wl.skydrive_update:上传,修改用户onedrive 上存储的文件

用户基本信息的json数据格式:

{

“id”: “8c8ce076ca27823f”,

“name”: “Roberto Tamburello”,

“first_name”: “Roberto”,

“last_name”: “Tamburello”,

“gender”: null,

“locale”: “en_US”

}

也就是上例的meResult.Result。

Windows phone 8.1 中 onedrive 上传文件:

 private async void uploadButton_Click(object sender, RoutedEventArgs e)//上传
{
try
{
msgText.Text = "亲:正在上传";
if (result.Session != null)
{
var liveConnectClient = new LiveConnectClient(result.Session);
//读取文件
StorageFolder localFolder = ApplicationData.Current.LocalFolder;
StorageFile file = await localFolder.GetFileAsync(App.TestFileName); LiveUploadOperation uploadOperation = await liveConnectClient.CreateBackgroundUploadAsync(
"me/skydrive", file.Name, file, OverwriteOption.Rename);
LiveOperationResult uploadResult = await uploadOperation.StartAsync(); }
}
catch (LiveAuthException ex)
{
msgText.Text = ex.Message;
}
catch (LiveConnectException ex)
{
msgText.Text = ex.Message;
} }

Windows phone 8.1 中 onedrive 下载文件:

我们已知要下载的文件名为:Test.txt。也就是刚上传的文件。

 private async void downButton_Click_1(object sender, RoutedEventArgs e)//下载
{
try
{
msgText.Text = "亲:正在下载";
string id = string.Empty; if (result.Session != null)
{
var connectClient = new LiveConnectClient(result.Session); LiveOperationResult operationResult = await connectClient.GetAsync("me/skydrive/search?q=Test.txt");
List<object> items = operationResult.Result["data"] as List<object>;
IDictionary<string, object> file = items.First() as IDictionary<string, object>;
id = file["id"].ToString(); LiveDownloadOperation operation = await connectClient.CreateBackgroundDownloadAsync(string.Format("{0}/content", id));
var results = await operation.StartAsync();
string strings=results.Stream.ToString(); StorageFolder localFolder = ApplicationData.Current.LocalFolder;
StorageFile files = await localFolder.GetFileAsync(App.TestFileName); await FileIO.WriteTextAsync(files, strings); msgText.Text = "恭喜:您已成功从OneDrive下载文件!"; }
}
catch (Exception ex)
{
msgText.Text = ex.Message;
}
}

关于请求参数的说明:

filter:指定项目类型(all(默认类型)、photos、videos、audio、folders 或 albums)来仅获取某些类型的项目。例如,若要仅获取照片,请使用 FOLDER_ID/files?filter=photos。

limit:指定要获取的项目数来获取有限数量的项目。例如,若要获取前两个项目,请使用 FOLDER_ID/files?limit=2。

offset: offset 参数设置为要获取的第一个项目的索引来指定要获取的第一个项目。例如,若要获取从第三个项目开始的两个项目,请使用 FOLDER_ID/files?limit=2&offset=3。

q:获取指定名称的文件。例如上例中的:me/skydrive/search?q=Test.txt

Windows phone 8.1 中 onedrive 上传图片:

上传和图片和文件是一样的方法:

 private async  void uploadPiactrue_Click(object sender, RoutedEventArgs e)
{ StorageFile file = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFileAsync("2.jpg");
try
{
msgText.Text = "亲:正在上传"; if (result.Session != null)
{
var liveConnectClient = new LiveConnectClient(result.Session); LiveUploadOperation uploadOperation = await liveConnectClient.CreateBackgroundUploadAsync(
"me/skydrive/camera_roll", file.Name, file, OverwriteOption.Overwrite);
LiveOperationResult uploadResult = await uploadOperation.StartAsync(); if (uploadResult.Result != null)
{
msgText.Text = "恭喜:您已成功上传OneDrive!";
} }
}
catch (LiveAuthException ex)
{
msgText.Text = ex.Message;
}
catch (LiveConnectException ex)
{
msgText.Text = ex.Message;
}
}

onedrive使用友好名称访问特定文件夹:

要访问特定的 OneDrive 文件夹,你可以使用友好名称,而非文件夹 ID。你可以在 OneDrive UI 中使用以下友好名称来访问相应的文件夹: •USER_ID/skydrive/camera_roll 表示“OneDrive 本机照片”文件夹。 •USER_ID/skydrive/my_documents 表示“文档”文件夹。 •USER_ID/skydrive/my_photos 表示“图片”文件夹。 •USER_ID/skydrive/public_documents 表示“公用”文件夹。

一般情况下,将 USER_ID 替换为 me(对于已登录用户) 。如上例,就是将图片上传至本机照片文件夹。

Windows phone 8.1 中 onedrive 下载图片:

private  async void downPictrue_Click(object sender, RoutedEventArgs e)
{
msgText.Text = "亲:正在下载";
string idPictrue = string.Empty;
string namePictrue = string.Empty;
try
{
LiveConnectClient liveClient = new LiveConnectClient(result.Session);
LiveOperationResult operationResult =
await liveClient.GetAsync("me/skydrive/camera_roll");
dynamic results = operationResult.Result;
string idfolder= results.id;
LiveOperationResult pictrueResult = await liveClient.GetAsync(idfolder+"/photos");
dynamic pictrues = pictrueResult.Result;
foreach (dynamic pictrue in pictrues.data)
{
namePictrue = pictrue.name;
idPictrue = pictrue.id;
StorageFile pictrueFile = await ApplicationData.Current.LocalFolder.CreateFileAsync(namePictrue,CreationCollisionOption.ReplaceExisting);
await liveClient.BackgroundDownloadAsync(idPictrue+"/picture?type=thumbnail", pictrueFile);
var imgSource = new BitmapImage();
var stream = await pictrueFile.OpenReadAsync();
imgSource.SetSource(stream);
imgResult.Source = imgSource; } msgText.Text = "恭喜:您已成功从OneDrive下载图片!";
} catch (LiveConnectException exception)
{
msgText.Text = "Error getting album info: " + exception.Message;
}

onedrive项目的预览:

若要显示 OneDrive 项目的预览,请向 /skydrive/get_item_preview?type=TYPE&url=URL 发出 GET 请求。可选的 type 查询字符串参数为以下值之一:
•thumbnail (缩略图)
•small(为了获得最大值 100 × 100 像素预览)
•album(最大 200 × 200)
•normal(最大 800 × 800)

Windows phone 8.1 中 onedrive 建立文件夹:

 private  async void creatFodel_Click(object sender, RoutedEventArgs e)
{ try
{
if (result.Session != null)
{
var folderData = new Dictionary<string, object>();
folderData.Add("name", "Test");
LiveConnectClient liveClient = new LiveConnectClient(result.Session);
LiveOperationResult operationResult =
await liveClient.PostAsync("me/skydrive", folderData); msgText.Text = string.Join(" ", "新建文件夹", operationResult.Result["name"].ToString(),
"ID:", operationResult.Result["id"].ToString());
} }
catch (LiveConnectException exception)
{
msgText.Text = "Error creating folder: " + exception.Message;
} }

Windows phone 8.1 中 onedrive 删除文件夹:

 private  async void deleteFodel_Click(object sender, RoutedEventArgs e)
{
string id = string.Empty;
LiveConnectClient liveClient = new LiveConnectClient(result.Session);
LiveOperationResult operationResult = await liveClient.GetAsync("me/skydrive/search?q=Test");
List<object> items = operationResult.Result["data"] as List<object>;
IDictionary<string, object> file = items.First() as IDictionary<string, object>;
id = file["id"].ToString();
LiveOperationResult operationResult1 =
await liveClient.DeleteAsync(id);
msgText.Text = "删除文件夹成功";
}

Windows phone 8.1 中 onedrive 移动,复制文件夹:

LiveOperationResult operationResult =
await moveFileClient.MoveAsync("file.9d24497f7fef8f33.9D24497F7FEF8F33!748",
"folder.9d24497f7fef8f33.9D24497F7FEF8F33!265");

第一参数是你要移动的文件ID,第二个参数是你要移动的文件的ID。复制的话将MoveAsync改为CopeAsync,然后俩个参数改为你想要复制前后的文件或者文件夹的ID即可。

LiveConnectClient.GetAsync在返回的 JavaScript 对象表示法 (JSON) 格式的对象中,要务必注意两个结构:id 结构,表示顶层文件夹的文件夹 ID;

如果向 me/skydrive/files 发出请求,则返回的 JSON 格式的对象仅包含有关用户顶层文件夹中所有子文件夹、子唱片集和文件的信息

要获取用户近期最常用的 OneDrive 文档列表,请使用 wl.skydrive 作用域向 /USER_ID/skydrive/recent_docs 发出 GET 请求

获取用户的 OneDrive 总存储配额和剩余存储配额

要获取有关用户在 OneDrive 中可用和未用存储空间的信息,请向 /me/skydrive/quota 或 /USER_ID/skydrive/quota 进行 GET 调用

FOLDER_ID/files,其中 FOLDER_ID 代表有效的文件夹 ID,可以获取该文件夹中所有项目的列表

通过使用上面代码中的 sort_by 参数指定如下条件来设置项目的排序条件:updated、name、size 或 default。例如,若要按名称对项目进行排序,请使用 FOLDER_ID/files?sort_by=name。
通过使用上面代码中的 sort_order 参数指定如下顺序来设置项目的排序顺序:ascending 或 descending。例如,若要按降序对项目进行排序,请使用 FOLDER_ID/files?sort_order=descending。

Windows phone 8.1 中 onedrive 唱片集:

•me/albums,可以获取有关已登录用户的所有唱片集的信息。
•/me/skydrive/shared/albums,可以获取有关已登录用户的所有共享唱片集的信息。
•USER_ID/albums,可以获取有关用户的与有效 USER_ID 相对应的所有唱片集的信息。

•使用 ALBUM_ID/photos 或 ALBUM_ID/videos 获取唱片集中所有照片或视频的列表。之后,你的代码可以进行另一个调用,该调用使用特定的照片 ID 或视频 ID 获取相应照片或视频的信息。
•使用 ALBUM_ID/files 获取唱片集中所有照片、视频、音频、子唱片集和子文件夹的列表。之后,你的代码可以进行另一个调用,该调用使用特定的照片 ID、视频 ID、唱片集 ID、音频 ID 或文件夹 ID 获取相应照片、视频、唱片集、音频或文件夹的信息。
•将上面代码中带有可选 type 参数的 /picture 与下列值之一结合使用来获取照片或视频的图片:small、normal(在未指定 type 参数时为默认值)、album、thumbnail 或 full。例如,若要获取照片的缩略图,请使用 PHOTO_ID/picture?type=thumbnail。
•通过使用 VIDEO_ID/video 获取视频的内容。

Windows phone 8.1 中 onedrive 遍历文件:

遍历onedrive中所有文件并获取指定文件。

await connectClient.GetAsync(“me/skydrive/files”);

List<object> items = operationResult.Result["data"] as List<object>;

foreach (object item in items)     {

IDictionary<string, object> file = item as IDictionary<string, object>;

if (file["name"].ToString() == “WorkBook.xml”)

{                id = file["id"].ToString();                  }

}

Windows phone 8.1 中 onedrive操作源代码:

http://www.bcmeng.com/bbs/forum.php?mod=viewthread&tid=188&extra=page%3D1

windows phone 8.1开发 onedrive操作详解的更多相关文章

  1. windows phone 8.1开发SQlite数据库操作详解

    原文出自:http://www.bcmeng.com/windows-phone-sqlite1/ 本文小梦将和大家分享WP8.1中SQlite数据库的基本操作:(最后有整个示例的源码)(希望能通过本 ...

  2. C语言操作WINDOWS系统存储区数字证书相关函数详解及实例

     C语言操作WINDOWS系统存储区数字证书相关函数详解及实例 以下代码使用C++实现遍历存储区证书及使用UI选择一个证书 --使用CertOpenSystemStore打开证书存储区. --在循环中 ...

  3. SVN的Windows和Linux客户端操作详解

    SVN的Windows和Linux客户端操作详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Windows客户端操作 1.安装SVN客户端 a>.去官网下载svn软件 ...

  4. Linux驱动开发必看详解神秘内核(完全转载)

    Linux驱动开发必看详解神秘内核 完全转载-链接:http://blog.chinaunix.net/uid-21356596-id-1827434.html   IT168 技术文档]在开始步入L ...

  5. [Android新手区] SQLite 操作详解--SQL语法

    该文章完全摘自转自:北大青鸟[Android新手区] SQLite 操作详解--SQL语法  :http://home.bdqn.cn/thread-49363-1-1.html SQLite库可以解 ...

  6. Spark Streaming揭秘 Day28 在集成开发环境中详解Spark Streaming的运行日志内幕

    Spark Streaming揭秘 Day28 在集成开发环境中详解Spark Streaming的运行日志内幕 今天会逐行解析一下SparkStreaming运行的日志,运行的是WordCountO ...

  7. 【转】【Android UI设计与开发】之详解ActionBar的使用,androidactionbar

    原文网址:http://www.bkjia.com/Androidjc/895966.html [Android UI设计与开发]之详解ActionBar的使用,androidactionbar 详解 ...

  8. VS2010开发程序打包详解

    VS2010开发程序打包详解 转自:http://blog.sina.com.cn/s/blog_473b385101019ufr.html 首先打开已经完成的工程,如图: 下面开始制作安装程序包. ...

  9. SpringMVC【开发Controller】详解

    前言 本文主要是讲解在Controller中的开发,主要的知识点有如下: 编码过滤器 使用注解开发 注解@RequestMapping详解 业务方法接收参数 字符串转日期 重定向和转发 返回JSON ...

随机推荐

  1. Callback Promise Generator Async-Await 和异常处理的演进

    根据笔者的项目经验,本文讲解了从函数回调,到 es7 规范的异常处理方式.异常处理的优雅性随着规范的进步越来越高,不要害怕使用 try catch,不能回避异常处理. 我们需要一个健全的架构捕获所有同 ...

  2. Wireshark网络抓包(三)——网络协议

    一.ARP协议 ARP(Address Resolution Protocol)地址解析协议,将IP地址解析成MAC地址. IP地址在OSI模型第三层,MAC地址在OSI第二层,彼此不直接通信: 在通 ...

  3. 11G内存设置一例

    11G的内存设置参数有memory_target.memory_max_target.sga_target.pga_aggregate_target等. 一个特别繁忙的数据库,前期内存设置较低,物理内 ...

  4. 关于JavaScript中的编码和解码函数

    js对文字进行编码涉及3个函数:escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decodeURIComponent 1 ...

  5. 升级到appcompat v7 21.0.2之后遇到的问题解决方法

    1)一开始是手动直接覆盖文件到对应的lib project下,提示数个style找不到.原因是新旧版本的文件命名和结构不同,所以这个问题只需要把project目录清空,重新复制文件即可解决. 2)发现 ...

  6. React实例----一个表单验证比较复杂的页面

    前言:这阵子看了两本CSS的书~对于CSS层叠,定位,继承等机制基本上都了解了,就想着自己写几个页面~正好自己就写了写CSS样式,然后用React渲染出来~ 闲话不多说,简单说一说这个页面,希望能对大 ...

  7. Javascript 闭包与高阶函数 ( 一 )

    上个月,淡丶无欲 让我写一期关于 闭包 的随笔,其实惭愧,我对闭包也是略知一二 ,不能给出一个很好的解释,担心自己讲不出个所以然来. 所以带着学习的目的来写一写,如有错误,忘不吝赐教 . 为什么要有闭 ...

  8. hadoop--安装1.2.1版本

    hadoop的安装分为三种方式,第一种单机安装,一般用于调试(其实一般都不用).第二种,伪分布式安装,一般程序员开发会使用这种方式.第三种,分布式安装,在实际环境中应用.今天在这里记下的是第二种,即伪 ...

  9. jQuery中绑定事件bind() on() live() one()的异同

    jQuery中绑定事件的四种方法,他们可以同时绑定一个或多个事件 bind()-------------------------版本号小于3.0(在Jquery3.0中已经移除,相应unbind()也 ...

  10. 使用jQuery操作DOM

    一.DOM操作分为3类 1.DOM Core DOM Core不是Javascript的专属品,任何一种支持DOM的编程语言都可以使用它.它的用途不仅限于处理一种使用标记语言编写出来的文档 2.HTM ...