FlashからCGIにバイナリを送りファイルを作成する

Flash(ActionScript3.0)からPOSTメソッドでCGIにバイナリデータを送る、そのシンプルな流れをメモしておきます。

Flashから送信(ActionScript

下記はFlashのテスト部分を抜き出したものです。
ByteArray()がバイトストリームで、本来は画像データや、ファイルフォーマットになっているものを突っ込むのですが、今は分かりやすく、適当な4バイトのデータを作って送ってみます。

var bytes:ByteArray = new ByteArray();
// とりあえずバイナリデータを作成.
bytes.writeByte( 1 );
bytes.writeByte( 2 );
bytes.writeByte( 3 );
bytes.writeByte( 4 );

var cgipath:String = new String('http://localhost/cgi-bin/testpost.cgi')
var request:URLRequest = new URLRequest(cgipath);

request.contentType = 'application/octet-stream';
request.method = URLRequestMethod.POST;
request.data = bytes; //送るデータをセット.

// 送りっぱなしで終了.
sendToURL( request );

// 別ウィンドウで開くなら下記の形で送信.
//navigateToURL( request, "_blank" );

CGI受信、ファイル作成(Ruby

POSTメソッドで送られたデータはSTDINに入ってきますので、それをそのままファイルに書き出すスクリプトを書きます。
自分の分かりやすいスクリプトとしてCGIRubyを使っていますが、PerlでもPHPでもPythonでもなんでもいいです。

#!c:/ruby/bin/ruby
# ↑もちろんここは適当なパスを.

print "Content-type: text/html\n\n"
print "<html><body>"
print "Hello Ruby CGI:" + ENV['CONTENT_LENGTH']
print "</body></html>"

# そのまま書き出し.
open( "test.dat", "wb" ){ |file|
  $stdin.binmode # バイナリモードにする.
  file.write $stdin.read
  # 大きなサイズのファイルを読み込む場合には、
  # 小さめのサイズで読み込み、whileで回すと無難.
}

上記CGIでは、なんらかの出力があったほうが見栄えがいいので、適当なprintをしていますが、基本的にprintの行はなくても問題ないです。
以上で、Flash→(POST)→CGI→(ファイル)というデータの流れを作ることが出来ます。

Smileys Triangle, short code #1

なんだか寝付けないので、ショートコード。
しかも新しい問題に手をつけてみる。
anarchy golf - Smileys Triangle
あれこれ考えて42Byte。

うーん、トップの39Byteまで、あと3バイト。
どうやればいいんだろ・・。
:-)))))))))))))


42Byteのコードを以下に載せておきます。

続きを読む

Dancing Kids, short code #4

久しぶりの空き時間にショートコーディング休憩。
いくつか表現手法を見直して、93Byteまで短くなりました。
これで、ようやく2桁かぁー。70Byte台は遠いなぁー。

いろいろやっている最中に知ったのですが、ヒアドキュメントは $>に渡せないのですね。

# OKなコード.
puts <<EOS
hoge
EOS #=> hoge

# NGなコード.
$> <<EOS
hoge
EOS #=> uninitialized constant EOS (NameError)


そんなこんなで格闘した93Byteのコードを以下に載せておきます。

続きを読む

Dancing Kids, short code #3

ちょっと気分転換にcode golf。
105Byteまで短くすることが出来ました。
anarchy golf - Dancing Kids

これでもまだまだトップのコードの1.5倍!!!
ここまで短くならないとちょっとショックですねー。

↓以下にコードを載せておきます。

続きを読む

Dancing Kids, short code #2

ちょっと思いついたことをあれこれやっていたら115Byteまで短くなりました。
主に、出力部分、変数の使いまわしなどを考えて短くしました。
anarchy golf - Dancing Kids

今日はこれが限界かな。

↓に現在のコードを載せておきます。これもLF改行で。

続きを読む

Dancing Kids, short code #1

昨日の Dancing Kids のショートコードの最初のsubmitをしてみた。
これが意外に難しくて、全然短くならない!!
でもビリはヤダー、と思ってなんとかギリギリびりにはならないような長さまで縮めて、133Byte。。マジで70Byteまでいけるのか??
anarchy golf - Dancing Kids

↓に現在のコードを載せておきます。LFのみの改行でアップしました。

続きを読む

google, short code #2

別のことしながらあれこれ試行錯誤していたら26Byteのgoogleコードが出来た!
前回のコードから2点を改良しただけ。
でもリザルト見ると3種類くらい存在しているような感じだな。

ま、いいか。


以下は26Byteのgoogle Rubyコード。

続きを読む