とりあえず、細かいことを気にしなければこんな感じでできるみたい。
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 のリファレンス とかで。