FTPを使ったファイルのアップロード
このチュートリアルでは、FTPサーバーにファイルをアップロードします。 起動するとフォルダ内の全ファイルをアップロードする、というシンプルなスクリプトを作ってみましょう。 また、実行中のログをファイルに記録してみます。
注: FlashAirがPCに挿入されている場合は、ログファイルが書き込めないことがあります。
はじめに
- FlashAirにUploadフォルダを作成し、アップロードするファイルを設置します。
- アップロード機能を有効にするために、CONFIGファイルに
UPLOAD=1
を追加します。 - FlashAirでLuaを実行するを参考に、Luaスクリプト実行方法をCONFIGファイルに指定します。
- アップロードするFTPサーバーがない場合は、ローカルFTPサーバーを構築しておきます。
アップロード
まず、よく使う変数の準備からはじめましょう。接続先のFTPサーバー情報を調べておきましょう。
/FTPUpload.lua
local logfile = "/FTPLog.txt" -- Log file created in FlashAir
local folder = "/Upload" -- Folder to upload file is located
local server = "192.168.1.1" -- IP address of FTP server
local serverDir = "/LuaTutorial" -- FTP server upload folder
local user = "ftp" -- FTP user name
local passwd = "abc123" -- FTP password
次に、これらの変数を組み合わせて、アップロードに使うURLを作成します。
-- Assemble our FTP command string
-- example: "ftp://user:pass@192.168.1.1/LuaTutorial"
local ftpstring = "ftp://"..user..":"..passwd.."@"..server..serverDir
そして、ログファイルを作成します。
-- Open the log file
local outfile = io.open(logfile, "w")
-- Write a header
outfile:write("File list: \n")
LuaFileSystem (lfs) を使ってフォルダ内をスキャンし、 fa.ftp()でアップロードを行います。 結果はログファイルに記録されています。 Webブラウザから実行しているならば、一部の出力は画面でも見られます。
-- For each file in folder...
for file in lfs.dir(folder) do
-- Get that file's attributes
attr = lfs.attributes(folder .. "/" .. file)
print( "Found "..attr.mode..": " .. file )
-- Don't worry about directories (yet)
if attr.mode == "file" then
--Attempt to upload the file!
--ex ftp("put", "ftp://user:pass@192.168.1.1/LuaTutorial/test.jpg", "Upload/test.jpg")
response = fa.ftp("put", ftpstring .. "/" .. file, folder .. "/" .. file)
--Check to see if it worked, and log the result!
if response ~= nil then
print("Success!")
outfile:write("" .. file .. "... Success!\n")
else
print("Fail :(")
outfile:write("" .. file .. "... Fail :(\n")
end
end
end
使い終わったら閉じるのを忘れずに!
--Close our log file
outfile:close()
これだけです!簡単でしょ!?
Luaスクリプト実行後、ルートフォルダにFTPLog.txtが追加され、実行結果が出力されます。
サンプルコード
このサイトのサンプルコードは二条項BSDライセンスで提供されています。