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
> 
> 
> 


Reply via email to