SQLの窓

2013年07月12日


Live SDK v5.4 : VS2012(C#) + Form アプリ / ファイルアップロード

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 / 画像アップロード
【VS(C#)の最新記事】
posted by lightbox at 2013-07-12 19:55 | VS(C#) | このブログの読者になる | 更新情報をチェックする
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり