如何使用Perl在SFTP(版本3)中将传输模式设置为ASCII

如何使用Perl在SFTP(版本3)中将传输模式设置为ASCII,perl,sftp,Perl,Sftp,我需要在Perl中使用SFTP(版本3)传输文件。传输文件时,我需要将传输模式设置为ASCII 请确认一下,如果可以使用任何Perl模块(Net::SFTP/Net::SFTP::Foreign/any)?SFTP版本3只支持二进制传输:)在SFTP版本3中,只有二进制模式 因此,如果程序想要使用ASCII/文本模式,它必须知道/猜测目标系统文本文件格式,在上载之前转换文件/内容,并上载转换后的文件/内容(以“二进制”模式)。虽然一些SFTP客户机具有构建它的特性,但Perl Net::SFTP

我需要在Perl中使用SFTP(版本3)传输文件。传输文件时,我需要将传输模式设置为ASCII


请确认一下,如果可以使用任何Perl模块(
Net::SFTP
/
Net::SFTP::Foreign
/any)?

SFTP版本3只支持二进制传输:)

在SFTP版本3中,只有二进制模式

因此,如果程序想要使用ASCII/文本模式,它必须知道/猜测目标系统文本文件格式,在上载之前转换文件/内容,并上载转换后的文件/内容(以“二进制”模式)。虽然一些SFTP客户机具有构建它的特性,但Perl Net::SFTP没有。在将文件/内容上传到Net::SFTP之前,您是否必须自己转换文件/内容。

使用:


请参阅。

谢谢大家的时间和支持!!!下面是我为给定需求申请的解决方案

步骤1:使用
NET::SFTP::Foreign
模块连接到服务器:
$sftp\u file=Net::sftp::Foreign->new($host,$user)

步骤2:检查目标服务器类型(unix/windows)

  • If Unix:从Unix系统发送文件时无需转换
  • 如果是Windows,请执行UNIX2DOS:
    $sftp\u文件->$direction(“$src”,“$trgt”,转换=>'unix2dos')

此方法将进行即时数据转换。

谢谢您的回复!我是否可以在本地计算机上将文件转换为dos(unix2dos)格式,然后将其传输到远程服务器?我无法在远程服务器上测试该文件。请帮忙。这行吗?谢谢Stevieb和Sebastien。如果我需要向远程服务器发送一个ASCII文件,我将执行“unix2dos-cscii文件”,然后发送(sftp)。但是当sftp文件时,它会默认为二进制格式吗?嗨,马丁,谢谢你的回复。是的,我需要将文件转换为ASCII格式并将文件发送到远程服务器。但我仅限于使用SFTP协议版本3。不,您不需要将文件转换为“ASCII”格式。没有这样的事。您需要将文件转换为目标平台使用的文本格式。感谢回复Salva。我可以将其用于sftp协议版本3吗?我的意思是它能工作吗?“unix2dos”转换是在传输之前在本地执行的(正如我在回答中所建议的)。因此,此解决方案与SFTP版本无关。当然,您必须使用正确的转换。如果您从Unix上载到Windows,则将使用“unix2dos”。使用“dos2unix”作为另一个方向。嗨,Salva,我收到了错误:“到远程服务器的连接已暂停”。你能看看下面的代码并帮我吗?我甚至试图通过移除转换部分来实现sftp。但还是有同样的问题。第二步“$ftp_file->put”代码:#失败/usr/bin/perl使用Net::SFTP::Foreign$ftp\u file=Net::SFTP::Foreign->new(主机=>$ftp\u地址,用户=>$ftp\u用户id,密码=>$ftp\u密码)或死“无法建立SFTP连接”。$ftp\u file->错误$ftp_文件->放置($ftp_源,$ftp_目录,转换=>'unix2dos')或死“无法传输:”.$ftp_文件->错误;你好,马丁,谢谢你的回复!因此,即使在本地转换文件后,SFTP在传输时是否会将其默认为二进制文件?另外,你能看看上面的问题并帮我提建议吗?是的,SFTP版本3总是使用二进制传输。请注意,这不是问题,因为您传输的文件在转换后已采用正确的格式(如果使用正确的格式)。
$sftp->put($local_from, $remote_to, conversion => 'unix2dos');