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

このチュートリアルでは、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ライセンスで提供されています。