FlashAirでファイルをPOSTする

FlashAirハッカソンに参加してきました。

賞は取れませんでしたが、成果物(自分が担当した部分)をアップしておきたいと思います。

できることは、FlashAirからファイルなどをサーバーにPOSTで送信します。

 

【FlashAirの/sample.txtをサーバーにPOSTで送るLUAスクリプト】


boundary = "--61141483716826"
contenttype = "multipart/form-data; boundary=" .. boundary
filepath = "/sample.txt"
mes = "--"..boundary.."\r\n"
 .."Content-Disposition: form-data; name=\"upfile\"; filename=\""..filepath .."\"\r\n"
 .."Content-Type: text/plain\r\n"
 .."\r\n"
 .."\r\n"
 .."--" .. boundary .. "--\r\n"
blen = lfs.attributes(filepath,"size") + string.len(mes) - 17
b,c,h = fa.request{url = "http://takahirohirata.com/upload.php",
 method = "POST",
 headers = {["Content-Length"] = tostring(blen),
 ["Content-Type"] = contenttype},
 file = filepath,
 body = mes
 }

(使用する場合はurl(”http://takahirohirata.com/upload.php”)を変更してください)

 

【POSTで送られたデータをfilesフォルダに保存するCGI(php)】


<?php
if (is_uploaded_file($_FILES["upfile"]["tmp_name"])) {
  if (move_uploaded_file($_FILES["upfile"]["tmp_name"], "files/" . $_FILES["upfile"]["name"])) {
    chmod("files/" . $_FILES["upfile"]["name"], 0644);
    echo $_FILES["upfile"]["name"] . "をアップロードしました。";
  } else {
    echo "ファイルをアップロードできません。";
  }
} else {
  echo "ファイルがありません。";
}
?>

(使用する場合はfilesフォルダを作成してください)

 

デバッグの方法が何かと面倒なのですが、自分のやり方としては、

FlashAirのCONFIGファイルの設定をインターネット同時接続モード


APPMODE=6

にし、パソコンのwifiをFlashAirに接続し、パソコンブラウザでFlashAirのLUAスクリプトを直接実行する(ブラウザのURLに記述して直接呼び出す)方法を取ってました。

ご参考までに!