FTPを使ったファイルのアップロード

最終更新: 2017/8

このチュートリアルでは、FTPサーバーにファイルをアップロードします。 起動するとフォルダ内の全ファイルをアップロードする、というシンプルなスクリプトを作ってみましょう。 また、実行中のログをファイルに記録してみます。

注: FlashAirがPCに挿入されている場合は、ログファイルが書き込めないことがあります。

はじめに

  1. FlashAirにUploadフォルダを作成し、アップロードするファイルを設置します。
  2. アップロード機能を有効にするために、CONFIGファイルに UPLOAD=1を追加します。
  3. FlashAirでLuaを実行するを参考に、Luaスクリプト実行方法をCONFIGファイルに指定します。
  4. アップロードする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が追加され、実行結果が出力されます。

サンプルコード

リポジトリを見る(GitHub)

このサイトのサンプルコードは 二条項BSDライセンスで提供されています。