Pregunta

Using the following ftp_download method works, but if I change

ftp.getbinaryfile(file,localdir,1024)   #=> Saves the file to localdir

to

ftp.getbinaryfile(file)    #=> returns nil

I get nil returned. According to

http://www.ruby-doc.org/stdlib-2.0/libdoc/net/ftp/rdoc/Net/FTP.html#method-i-getbinaryfile

inilf I set localfile to nil as above, the data should be retrieved and returned by the method. What am I doing wrong?

def ftp_download(domain,remotedir,filename_regex,user=nil,pwd=nil)
  ftp = Net::FTP::new(domain)
  if user && pwd
    ftp.login(user, pwd)
  end
  ftp.chdir(remotedir)
  fileList = ftp.nlst(filename_regex)

  fileList.each do |file|
    localdir=File.join(remotedir,file)
    localdir=localdir[1..-1] if localdir[0]="/"
    FileUtils.mkdir_p(File.dirname(localdir))
    ftp.getbinaryfile(file,localdir,1024)
  end
  ftp.close
end
¿Fue útil?

Solución

If you look at the getbinaryfile method signature you will notice that the default value for the second parameter (localfile) is not nil but File.basename(remotefile)

getbinaryfile(remotefile, 
              localfile=File.basename(remotefile), 
              blocksize=DEFAULT_BLOCKSIZE)

If you want localfile to be nil you have to pass it explicitly:

ftp.getbinaryfile(file, nil)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top