SDカード+Wi-Fi機能という、なかなかのものです。
http://www.flashair.info/
それだけなら、Eye-Fiとかでいいじゃん、と思うかもしれません。
ところが、こいつはLuaスクリプトを実行できるんですね。
さらに、PIO制御ができたり、なんか狂ってて素敵ですね。
そんな開発者向け情報はこちらで。
https://flashair-developers.com/ja/
なんとなく気になったので、もちろんMicrosoftAzureと連携してみます。
新しいファイル(sample.jpg)が追加されたら、MicrosoftAzureのBlobにアップロードする、というのをやってみましょう。
ただ、Azureストレージの認証ヘッダーをFlashAirだけで作れないので、セキュリティも考慮してPHP経由でアップロードしたいと思います。
まずは、FlashAirがインターネットにつながるように設定します。
Macなら、ターミナルで隠しフォルダと隠しファイルが直接編集できます。
カードの名前を「FLASHAIR」とします。
$ vi /Volumes/FLASHAIR/SD_WLAN/CONFIG
APPMODE=5
APPSSID=HWD15_581F28C13B88
APPNETWORKKEY=***************
LUA_SD_EVENT=/upload.lua
変更箇所だけ説明します。
APPMODEの初期値は4 (無線LAN親機)ですが、5(無線LAN子機)に変更します。
APPSSIDに接続するSSID、APPNETWORKKEYにはパスフレーズを設定します。
これで次回起動時に無線LANにつながります。
LUA_SD_EVENTは、カードにファイルが追加された際に発生するイベントで、そのタイミングで実行するLuaプログラムを指定します。
今回は、カードの「/」にあるupload.luaを指定します。
upload.luaは以下の内容です。
以下の例を参考に、PHPでのアップロードに必要なMAX_FILE_SIZEを追加します。
アップロード先は、今回はAzureWebSites上のPHPです。
$ vi /Volumes/FLASHAIR/upload.lua
boundary = "--1234567890"
contenttype = "multipart/form-data; boundary=" .. boundary
filepath = "sample.jpg"
mes = "--"
.. boundary .. "\r\n"
.."Content-Disposition: form-data; name=\"MAX_FILE_SIZE\"\r\n\r\n800000\r\n"
.."--" .. boundary .. "\r\n"
.."Content-Disposition: form-data; name=\"file\"; 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://flashair.azurewebsites.net/up.php",
method = "POST",
headers = {["Content-Length"] = tostring(blen),
["Content-Type"] = contenttype},
file = filepath,
body = mes
}
次は、アップロード先のPHPプログラムです。
Azure SDK for PHPの準備(https://github.com/Azure/azure-sdk-for-php)と、Azureストレージの設定とコンテナの作成が別途必要です。
$ vi up.php
require_once 'bin/vendor/autoload.php';
use WindowsAzure\Common\ServicesBuilder;
$account = 'Azureストレージのアカウント';
$key = 'アクセスキー';
$container = 'アップロード先のコンテナ名';
$connection = 'DefaultEndpointsProtocol=https;AccountName=' . $account . ';AccountKey=' . $key;
$blob = ServicesBuilder::getInstance()->createBlobService($connection);
/* save file */
$a = time();
$filename = "blob_" . "$a";
move_uploaded_file($_FILES['file']['tmp_name'], $filename);
/* upload Blob */
$content = fopen($filename, "r");
try {
$blob->createBlockBlob($container, "claudia.jpg", $content);
} catch (Exception $e) {
}
fclose($content);
unlink($filename);
これで、sample.jpgというファイルをFlashAirに書き込むと、Azureストレージに自動でアップロードされます。
サンプル程度ですが、興味があればどうぞ。
0 件のコメント:
コメントを投稿