It should work. Did you look at the C++ example in the netwerk test directory? Can you get a log of the FTP protocol with a network trace application like ngrep or set these environment variables:
set NSPR_LOG_MODULES=nsFTPProtocol:5 set NSPR_LOG_FILE=ftp.log Be sure to remove your password before setting this file to me :-) The test upload example is here: mozilla/netwerk/test/TestUpload.cpp Mike Lee wrote: > > Hi, I have a code to upload stuff over ftp. I believe it used to work, > but now (with mozilla 1.0) it only create a 0 byte file. The > onStopRequest's request.status popup with something like interface not > implemented. > > Naturally I take a look at editor's publish code, but it seems like they > make use of nsIWebBrowserPersist::saveDocument() instead of using the > nsiuploadchannel. I also tried use PublishCopyFile() in publish.js but > it seems the line > ftpChannel.uploadStream = srcChannel.open(); > is not correct. Probabily why they don't use it. > > Does anyone have any ideas on whats causing the problem. Or better > still, how to fix it. Code I use is attached below. I did some > modification, the original code that used to work is at [1] mozdev. > > Thanks. > > filepath point to the file with uri eg. file:///c:/foo.png > destUrl is a correct ftp uri eg. ftp://192.168.0.1/ > ftpUserName is the username > ftpPassword is filled with the correct password > > -- code snip -- > > var ioService = Components.classes["@mozilla.org/network/io-service;1"] > .getService(Components.interfaces.nsIIOService); > var url = Components.classes["@mozilla.org/network/standard-url;1"]; > fileurl = url.createInstance(Components.interfaces.nsIURL); > fileurl.spec = filepath; > fileurl = fileurl.QueryInterface(Components.interfaces.nsIFileURL); > var fileHandle = fileurl.file; > > remoteUrl = url.createInstance(Components.interfaces.nsIURL); > remoteUrl.spec = destUrl; > if (this.ftpUserName) { > remoteUrl.username = ftpUserName; > if (this.ftpPassword) { > remoteUrl.password = ftpPassword; > } > } > > if (remoteUrl.scheme == 'ftp') { > var channel = ioService.newChannelFromURI(remoteUrl) > .QueryInterface(Components.interfaces.nsIFTPChannel); > var upload = channel.QueryInterface( > Components.interfaces.nsIUploadChannel); > upload.setUploadFile(fileHandle, null, -1); > channel.asyncOpen(this, null); > } else { > alert ("Only ftp server is supported"); > } > > -- end code -- > > [1] > >http://www.mozdev.org/source/browse/mozblog/src/content/Attic/uploadPic.js?annotate=1.1&hideattic=0 > > >
