JavaでFTP
月に1つは何か試して記事書きたいなぁと思いますが、なかなか時間と体力がありません。
はまったことその1
vsftpdを使って、Vagrant+ChefでCentOS6上にFTPサーバを立てたのだけれど、ローカルのWindows環境で何も考えずにファイルを作ったものだから、vsftpd.confの行終端がCRLFになっていてvsftpdの起動でこけた。
LFにしたら問題なく動いた。
いやまぁそうなんだろうけど、これ、僕が悪いの?
はまったことその2
ローカルのWindows環境に入ってるセキュリティソフトのおかげで、サーバにつながらなかった。
最初、何でなのか全く分からなくて、今でも何でなのか分かっていない。
SSHはつながってるのに、FTPはつながらない。
パッシブモードにしてあるので一方向のはず。
iptablesは切ってある。
Windows側をWireshark、Linux側をtcpdumpで見てみても何も通信されてないので、もしや?と思ってセキュリティソフトのファイアウォールをOFFにしたらつながった。
とりえあずVagrantであげた仮想サーバとの間のルールを追加したらちゃんとつながるようになった。
はまったことその3
Wildflyを使い、クライアントからアップロードしたファイルをFTPサーバに保存するというプログラムになっているわけだけれど、なぜかJSFの処理を終えたあとにWildflyがERRORを吐く。
一時ファイルとして出力したファイルを消せない、とか言っている。
ERROR [io.undertow.request] (default task-4) UT005005: Cannot remove uploaded file C:\opt\wildfly-8.2.0.Final\standalone\tmp\chanko-ftp.war\undertow352795969556027635upload
何かな?と思っていたら、どうやファイルのInputStreamを閉じてないのが原因だった模様。try-with-resourceでInputStreamをcloseするようにしたら出なくなった。
その他雑感
実装はすごく簡単だったのだけれど、storeFileの処理部分で毎回2秒くらいかかる。ファイル自体は数KBで、ftpコマンドだと1秒かからない程度なのにも関わらず。
原因は探っていないけれど、今のところはそっとしておくことにする。