5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

任意の文字列をFlashAirにテキストファイルとして保存する

Last updated at Posted at 2016-06-13

 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の場合)

sample.js
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#の場合)

sample.cs
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へのアップロード

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?