ヨーキョクデイ

いろいろ雑食

FTP でテキストをアップロードしたい

とりあえず、細かいことを気にしなければこんな感じでできるみたい。

var ioService = Components.classes["@mozilla.org/network/io-service;1"]
                .getService(Components.interfaces.nsIIOService);

var uri = ioService.newURI("ftp://user:password@ftp.example.com/hoge.txt", null, null);

var channel = ioService.newChannelFromURI(uri);

var uploadChannel = channel.QueryInterface(Components.interfaces.nsIUploadChannel);

var stringInputStream = Components.classes["@mozilla.org/io/string-input-stream;1"]
                .createInstance(Components.interfaces.nsIStringInputStream);

var postData = "hogehoge";

stringInputStream.setData(postData, postData.length);

uploadChannel.setUploadStream(stringInputStream, "", -1);

var inputStream = channel.open();

inputStream.close();

イメージとしては、FTP 鯖上の当該ファイルに対して postData の文字列を流し込んでやるという感じなのかな。何事もなければ ftp://なんたら/hoge.txt に hogehoge と書き込まれるはず。
で、今回はお手軽に channel.open() という感じで同期通信したのだが、asyncOpen とかいうメソッドを使うと非同期通信が可能になるようだ。細かいところは nsIChannel のリファレンス とかで。