SkyDrive へ移動( VS2012 用テンプレート )
VS2010 では動作しませんでした。
SkyDrive でアプリを作成して、クライアント ID を取得して使用します。
Form1.cs
using Microsoft.Live;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public LiveAuthClient auth;
public LiveConnectClient lcc = null;
private CancellationTokenSource ctsUpload = new CancellationTokenSource();
public Form1()
{
InitializeComponent();
}
// ログイン結果より、セッションを作成
private async void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e)
{
// リダイレクトされた URL の処理
string url = e.Url.ToString();
string[] param = url.Split(new string[] { "=", "&" }, StringSplitOptions.None);
Debug.WriteLine(param);
// ( テスト的な方法 )
// リダイレクトされた結果の中で、必要な情報が含まれる処理を対象とする
if (param[2] == "lc")
{
Debug.WriteLine(auth.Session);
var target = await auth.ExchangeAuthCodeAsync(param[1]);
Debug.WriteLine(auth.Session);
// セッションの作成
lcc = new LiveConnectClient(target);
// テスト的な情報表示
Debug.WriteLine(lcc.Session);
var Result = await lcc.GetAsync("me/skydrive/files");
Debug.WriteLine(Result.RawResult);
// アップロード用の参照ボタンを有効にする
this.button2.Enabled = true;
}
}
// ログイン処理をブラウザ内で行う
private void button1_Click(object sender, EventArgs e)
{
auth = new LiveAuthClient("クライアント ID");
// auth.IntializeAsync();
string url = auth.GetLoginUrl(new string[] { "wl.signin", "wl.basic", "wl.skydrive_update" });
Debug.WriteLine(url);
// WebBrowser でログイン画面を表示
this.webBrowser1.Navigate(url);
}
// ファイルを参照してアップロード
private async void button2_Click(object sender, EventArgs e)
{
this.openFileDialog1.Filter = "すべて|*.*";
this.openFileDialog1.FilterIndex = 0;
DialogResult dr = this.openFileDialog1.ShowDialog();
if (dr == System.Windows.Forms.DialogResult.OK)
{
// 中止ボタンを有効にする
this.button3.Enabled = true;
// 選択されたファイルのパス
string FileName = Path.GetFileName(openFileDialog1.FileName);
Debug.WriteLine(openFileDialog1.FileName + "をアップロードします");
// トークンにキャンセル直後の処理を登録
ctsUpload.Token.Register(() =>
{
Debug.WriteLine("キャンセルされました");
});
// 経過処理用プライベートクラス
ProgressUpload pu = new ProgressUpload();
// アップロードが正常終了した時の戻り値
LiveOperationResult Result = null;
// キャンセルすると、WebException が発生
try
{
Result = await lcc.UploadAsync(
"me/skydrive",
FileName,
File.OpenRead(openFileDialog1.FileName),
OverwriteOption.Overwrite,
ctsUpload.Token,
pu
);
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
// トークンより、キャンセルを判断
if (ctsUpload.Token.IsCancellationRequested)
{
MessageBox.Show("アップロードはキャンセルされました");
}
else
{
// 正常終了
Debug.WriteLine(Result.RawResult);
MessageBox.Show("アップロードしました");
}
}
}
// 経過処理用のクラス
private class ProgressUpload : IProgress<LiveOperationProgress> {
public void Report(LiveOperationProgress value) {
Debug.WriteLine(value.ProgressPercentage);
}
}
// キャンセル
private void button3_Click(object sender, EventArgs e)
{
ctsUpload.Cancel();
}
}
}
関連する記事
わりと簡単に作れるので、SkyDrive の運用はアプリケーションを作ると便利になると思います。Windows ストアの場合はもっと統合されているのですが、現状では落ちるので使えません。
Windows8 ストアアプリは、年額4900円を払って登録しないと専用の API は使用できません。
Live SDK v5.4 : VS2010 + Windows Phone / 画像アップロード