FlashAirの機能に、ファイルアップロード機能(upload.cgi)があります。これを使うと、Wi-Fi接続した機器からFlashAirにファイルをアップロードすることができるのですが、この機能を利用して、FlashAir内に配置したHTMLファイルのJavaScriptから、任意の文字列をファイルとしてFlashAir内に保存することができます。また、同じように、Wi-Fi接続した機器のアプリケーションから任意の文字列をファイルとしてFlashAir内に生成できます。
今回は、JavaScriptとC#の場合についてご紹介します。
CONFIGファイルの設定
FlashAirのSD_WLANフォルダ内のCONFIGファイルに、UPLOADオプションを付加します。
UPLOAD=1
※SD_WLANフォルダとCONFIGファイルは不可視属性ファイルなので注意してください。
テキストファイルの保存
以下のサンプルコードでは、任意の文字列をテキストファイル(sample.txt)としてFlashAirに保存します。FlashAir内のHTMLファイルに記述したJavaScriptでも実行できますし、FlashAirとWi-Fi接続した外部機器内のHTMLファイルに記述したJavaScriptでも実行できます。
今回のサンプルコードでは、FlashAirのホスト機器からのファイル書き込み禁止処置 - WRITEPROTECTの指定をしていません。必要に応じて指定してください。また、同様にアップロード先ディレクトリの指定、アップロードファイルの作成時間の指定も必要に応じて指定してください。
指定例:
http://flashair/upload.cgi?WRITEPROTECT=ON&UPDIR=/DIRNAME&FTIME=0x99999999
※FTIMEの0x99999999は日時を16進数で表したものです。任意のものに置き換えてください。詳細は、アップロードファイルの作成時間の指定を参照してください。
サンプルコード(JavaScriptの場合)
function uploadStringToFile(str){
var blob = new Blob([str] , {type:"text/plain"});
execPost("http://flashair/upload.cgi", blob, "sample.txt");
}
function execPost(sendurl, senddata, sendname) {
var form_data = new FormData();
form_data.append( "enctype" , "multipart/form-data" );
form_data.append("file", senddata , sendname);
var xhr = new XMLHttpRequest();
xhr.onload = function (e){
console.log(xhr.responseText );
};
xhr.open("POST" , sendurl);
xhr.send(form_data);
}
//呼び出し例:
uploadStringToFile("任意の文字列");
サンプルコード(C#の場合)
async Task<String> uploadStringToFile(String str)
{
String rtnString;
var httpClient = new HttpClient();
Stream sr = new MemoryStream(Encoding.Unicode.GetBytes(str));
var fileContent = new StreamContent(sr);
fileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("multipart/form-data")
{
FileName = "sample.txt"
};
try{
HttpResponseMessage aResponse = await httpClient.PostAsync("http://flashair/upload.cgi", fileContent);
rtnString = aResponse.ToString();
}
catch(Exception e){
rtnString = "HTTP Connection ERROR!!";
}
return rtnString;
}
//呼び出し例
var str = await uploadStringToFile("任意の文字列");
テキストファイルの読み出し
ちなみに、保存したファイルは以下のURLを参照することで読み出せます。
http://flashair/sample.txt
まとめ
これで、FlashAir内のプログラムで保存しておきたい状態情報があれば、ファイルとして保存しておけば、電源断後、FlashAir起動時にファイルを読み込むことで、状態情報を再現できます。
ユーザー設定情報などを保存しておくとよいですね。
参考資料
FlashAir Developers - upload.cgi
FlashAir Developers - FlashAirへのアップロード