I use it all the time going from NT to Solaris. Try "$ftp->binary();".

[EMAIL PROTECTED] wrote:

> I am writing a perl script to automatically transfer a section of
> our Intranet to Internet, at the same time reformatting index
> pages and rearranging directories. I am rather satisfied of the
> outcome, but I have problems with the transfer of TIFF images:
> apparently, they are transferred in ASCII mode, in spite of the
> message "Opening BINARY data mode" in the log.
>
> Here is a test script I used to narrow down the problem (sorry
> for the masking of the addresses, even if we don't have an
> explicit policy to that effect I think it's safer to avoid
> sending them out):
>
> -----<Cut here>-----
> #!/usr/bin/perl -w
>
> $debug = 1 ;
>
> $localfile = "test.tif" ;
> $remotefile = "test-auto.tif" ;
>
> use Net::FTP ;
> use Fcntl ;
>
> $ftp = Net::FTP -> new ( "xxx.yyy.z.ww" ,
>                          Debug => $debug , Passive => 0
>                          ) ;
> if ( ! defined $ftp ) {
>     print "Error: connection to the FTP server failed.\n" ;
>     print "Reason: [EMAIL PROTECTED]" ;
>     exit 1 ;
> }
>
> $ftp -> login ( "xxxxxxxxxxxx" , "************" ) ;
>
> if ( ! $ftp -> ok () ) {
>     print "Error connecting to the FTP server.\n" ;
>     $errortext = $ftp -> message ;
>     print "Reason: $errortext</p>\n" ;
>     exit 1 ;
> }
>
> $ftp -> cwd ( "xxx.xxxxxx.it/ProjectTest/ ) ;
>
> # $ftp -> type ( "binary" ) ;
> $ftp -> quot ( "TYPE" , "I" ) ;

$ftp->binary();        # <-- Try this

>
> $ftp -> put ( $localfile , $remotefile ) ;
>
> # $dcref = $ftp -> stor ( $remotefile ) ;
> # sysopen ( LOC , $localfile , O_RDONLY ) ;
> # binmode LOC ;
>
> # my $readbuf = '' ;
> # my $nread = 0 ;
> # my $bsize = 1024 ;
> # while ( ( $nread = sysread ( LOC , $readbuf , $bsize ) ) != 0 )
> {
> #     $dcref -> write ( $readbuf , $nread ) ;
> # }
> # $dcref -> close ;
> # close LOC ;
>
> $ftp -> quit ;
> -----<Cut here>-----
>
> The (NT) server I am connecting to does not understand "TYPE
> BINARY", so I have to send a "TYPE I" command instead. In the
> commented section I tried to use a dataconn object to have more
> control. I also tried to turn passive mode on, since the server
> seems to prefer passive data transfer. The result is always the
> same: the file transferred via manual ftp is correctly sent,
> while the one transferred via Net:FTP gets corrupted.
>
> And here is the output:
>
> -----<Cut here>-----
> Net::FTP: Net::FTP(2.65)
> Net::FTP:   Exporter(5.566)
> Net::FTP:   Net::Cmd(2.21)
> Net::FTP:   IO::Socket::INET(1.26)
> Net::FTP:     IO::Socket(1.27)
> Net::FTP:       IO::Handle(1.21)
>
> Net::FTP=GLOB(0x806517c)<<< 220 InterScan FTP VirusWall NT 3.53
> (Stand-alone Mode), Virus scan on
> Net::FTP=GLOB(0x806517c)>>> user [EMAIL PROTECTED]
> Net::FTP=GLOB(0x806517c)<<< 331 Password required for
> xxxxxxxxxxxx.
> Net::FTP=GLOB(0x806517c)>>> PASS ....
> Net::FTP=GLOB(0x806517c)<<< 230 User xxxxxxxxxxxx logged in.
> Net::FTP=GLOB(0x806517c)>>> CWD xxx.xxxxxx.it/ProjectTest/
> Net::FTP=GLOB(0x806517c)<<< 250 CWD command successful.
> Net::FTP=GLOB(0x806517c)>>> TYPE I
> Net::FTP=GLOB(0x806517c)<<< 200 Type set to I.
> Net::FTP=GLOB(0x806517c)>>> PORT xx,yyy,w,zz,14,24
> Net::FTP=GLOB(0x806517c)<<< 200 PORT command successful.
> Net::FTP=GLOB(0x806517c)>>> STOR test.tif
> Net::FTP=GLOB(0x806517c)<<< 150 Opening BINARY mode data
> connection for test.tif.
> Net::FTP=GLOB(0x806517c)<<< 226-Message from InterScan FTP
> VirusWall NT 3.53
> Net::FTP=GLOB(0x806517c)<<< 226-No virus found in test.tif
> Net::FTP=GLOB(0x806517c)<<< 226 Transfer complete.
> Net::FTP=GLOB(0x806517c)>>> QUIT
> Net::FTP=GLOB(0x806517c)<<< 221
> -----<Cut here>-----
>
> Everything seems just fine, doesn't it? Well it isn't; here is an
> ftp session which demonstrates it:
>
> -----<Cut here>-----
> $ ftp xxx.yyy.z.ww
> Connected to xxx.yyy.z.ww (xxx.yyy.z.ww).
> 220 InterScan FTP VirusWall NT 3.53 (Stand-alone Mode), Virus
> scan on
> 331 Password required for xxxxxxxxxxxx.
> 230 User xxxxxxxxxxxx logged in.
> Remote system type is Windows_NT.
> ftp> cd xxx.xxxxxx.it/ProjectTest/
> 250 CWD command successful.
> ftp> bin
> 200 Type set to I.
> ftp> put test.tif
> local: test.tif remote: test.tif
> 227 Entering Passive Mode (xxx,yyy,z,ww,10,47)
> 125 Data connection already open; Transfer starting.
> 226-Message from InterScan FTP VirusWall NT 3.53
> 226-No virus found in test.tif
> 226 Transfer complete.
> 110180 bytes sent in 0.325 secs (3.3e+02 Kbytes/sec)
> ftp> ls
> 227 Entering Passive Mode (xxx,yyy,z,ww,10,63)
> 125 Data connection already open; Transfer starting.
> 02-24-03  10:58AM               110494 test-auto.tif
> 02-24-03  11:12AM               110180 test.tif
> 226 Transfer complete.
> ftp> quit
> 221
> $ wc -l test.tif
>     314 test.tif
> -----<Cut here>-----
>
> As you can see from the output of "wc", the tif "file" has 314
> "lines", so that an additional octet is added for each "line", as
> in ASCII mode.
>
> Sorry for the length, I tried to be as precise as possible. Any
> suggestion is HIGHLY welcome...
>
> Francesco Marchetti-Stasi
> (f.marchettistasi at avlp.it)

--

James D. White   ([EMAIL PROTECTED])
Department of Chemistry and Biochemistry
University of Oklahoma
620 Parrington Oval, Room 313
Norman, OK 73019-3051
Phone: (405) 325-4912, FAX: (405) 325-7762



Reply via email to