SQLの窓

2012年11月01日


Windows Phone の実行画面(自分のアプリのみ)をJPG化してWEBにPOSTするサンプル

この画面をアップロードします。



POST された画像はこちらです。



ごく普通の Boundary を使ったバイナリアップロードです。
最後に、UI スレッドへ結果を通知する為に Deployment.Current.Dispatcher.BeginInvoke を使用しています。

Windows Phone まとめリンク

Windows Phone

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;

using System.Diagnostics;
using System.IO;
using System.Windows.Media.Imaging;
using System.Text;
using System.Threading;
using System.Windows.Threading;

namespace WebPost
{
	public partial class MainPage : PhoneApplicationPage
	{

		// コンストラクター
		public MainPage()
		{
			InitializeComponent();
		}

		// イベント引き渡し用クラス
		private class MyParam
		{
			public WebRequest wr;
			public MemoryStream ms;
			public string strBoundary;

			public MyParam()
			{
				wr = null;
				ms = null;
				strBoundary = null;
			}
		}

		IAsyncResult iar2 = null;

		// 書き込み
		public void WriteCallBack(IAsyncResult ar)
		{
			Debug.WriteLine("WriteCallBack");

			HttpWebRequest req = (HttpWebRequest)((MyParam)ar.AsyncState).wr;
			MemoryStream stream = ((MyParam)ar.AsyncState).ms;
			string strBoundary = ((MyParam)ar.AsyncState).strBoundary;

			Stream rs = req.EndGetRequestStream(ar);

			BinaryWriter sw = new BinaryWriter(rs);

			Encoding encoding = Encoding.GetEncoding("iso-8859-1");
			Byte[] content = encoding.GetBytes("-----"+strBoundary+"\n");
			sw.Write( content,0 , content.Length );

			content = encoding.GetBytes("Content-Disposition: form-data; name=\"target\"; filename=\"LayoutRoot.jpg\"\n");
			sw.Write( content,0 , content.Length );

			content = encoding.GetBytes("Content-Type: image/jpeg\n");
			sw.Write( content,0 , content.Length );

			content = encoding.GetBytes("\n");
			sw.Write( content,0 , content.Length );

			sw.Write(stream.GetBuffer(), 0, stream.GetBuffer().Length);

			sw.Write("\n-----" + strBoundary + "--\n");

			sw.Close();

			AsyncCallback readCallBack = new AsyncCallback(this.ReadCallBack);
			IAsyncResult iar2 = req.BeginGetResponse(readCallBack, req);

		}


		// 読み込み
		public void ReadCallBack(IAsyncResult ar)
		{

			HttpWebRequest req = (HttpWebRequest)ar.AsyncState;
			HttpWebResponse response = (HttpWebResponse)req.EndGetResponse(ar);

			Encoding enc = System.Text.Encoding.GetEncoding("UTF-8");
			StreamReader sr = new StreamReader(response.GetResponseStream(), enc);

			string str = sr.ReadToEnd();
			Debug.WriteLine(str);
			sr.Close();

			// 完了後の UI スレッドへのアクセス
			Deployment.Current.Dispatcher.BeginInvoke(() =>
			{
				MessageBox.Show("送信しました");
			});

		}

		// 送信
		private void button1_Click_1(object sender, RoutedEventArgs e)
		{
			string strBoundary = DateTime.Now.Ticks.ToString("x");

			WriteableBitmap wb = new WriteableBitmap(LayoutRoot, null);
			MemoryStream stream = new MemoryStream();
			wb.SaveJpeg(stream, wb.PixelWidth, wb.PixelHeight, 0, 85);

			WebRequest wr = HttpWebRequest.Create("http://localhost/php_json/up.php");

			wr.Method = "POST";
			wr.ContentType = "multipart/form-data; boundary=---" + strBoundary;

			AsyncCallback writeCallBack = new AsyncCallback(WriteCallBack);
			MyParam myParam = new MyParam() { wr = wr, ms = stream, strBoundary = strBoundary };

			IAsyncResult iar1 = wr.BeginGetRequestStream(writeCallBack, myParam);

		}


	}
}
関連する記事

VBScript を使って HTTPプロトコルで PHP へファイルをアップロードする方法

ファイルのアップロード時のデータのダンプ


▼ 受け取り側の PHP です
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=utf-8">
</HEAD>
<BODY>
<FORM 
	enctype="multipart/form-data"
	method="POST"
>
 
	アップロードするファイル : 
	<INPUT name="target" type="file" style='width:400'>
	<INPUT type="submit" value="アップロード">
 
</FORM>
<PRE>
<?
if ( $_SERVER['REQUEST_METHOD'] == "POST" ) {
 
	$upload = realpath("./");
	$upload .= ( DIRECTORY_SEPARATOR . $_FILES['target']['name'] );

	print $upload;

	if ( move_uploaded_file(
		$_FILES['target']['tmp_name'], $upload ) ) {
		print "アップロードに成功しました<br>\n";
	}

	print_r( $_FILES );
}

?>
</PRE>
</BODY></HTML>



【Windows Phoneの最新記事】
posted by lightbox at 2012-11-01 23:45 | Windows Phone | このブログの読者になる | 更新情報をチェックする
container 終わり

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

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