【问题标题】:How to set the transfer mode to ASCII in SFTP (version 3) using Perl如何使用 Perl 在 SFTP(版本 3)中将传输模式设置为 ASCII
【发布时间】:2020-08-04 21:32:46
【问题描述】:

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

有人可以确认一下,是否可以使用任何 Perl 模块 (Net::SFTP/Net::SFTP::Foreign/any)?

【问题讨论】:

    标签: perl sftp


    【解决方案1】:

    使用Net::SFTP::Foreign

    $sftp->put($local_from, $remote_to, conversion => 'unix2dos');
    

    On the fly data conversion

    【讨论】:

    • 感谢萨尔瓦的回复。我可以将它与 sftp 协议版本 3 一起使用吗?我的意思是它有效吗?
    • “unix2dos”转换在传输之前在本地执行(如我的回答中所建议的那样)。所以这个解决方案是 SFTP 版本无关的。您当然必须使用正确的转换。如果您从 Unix 上传到 Windows,将使用“unix2dos”。使用“dos2unix”作为另一个方向。
    • 嗨萨尔瓦,我收到错误:“与远程服务器的连接停止”。你能看看下面的代码并帮助我吗?我什至尝试通过删除转换部分来 sftp。但仍然遇到同样的问题。它在第二步“$ftp_file->put”失败代码:#!/usr/bin/perl use Net::SFTP::Foreign; $ftp_file = Net::SFTP::Foreign->new(host => $ftp_address, user => $ftp_user_id, passphrase => $ftp_password) or die "无法建立 SFTP 连接".$ftp_file->error; $ftp_file->put($ftp_source,$ftp_dir_chg,conversion => 'unix2dos') or die "Unable to transfer:" .$ftp_file->error;
    • 嗨马丁,感谢您的回复!那么,即使在本地转换文件后,SFTP 是否会在传输时将其默认为二进制?另外,您能看看上面的问题并帮助我提出您的建议吗?
    • 是的,SFTP 版本 3 始终使用二进制传输。请注意,这不是问题,因为您正在传输的文件在转换后已经是正确的格式(如果您使用正确的格式)。
    【解决方案2】:

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

    【讨论】:

    • 感谢您的回复!我可以在本地机器上将文件转换为 dos(unix2dos) 格式,然后将其传输到远程服务器吗?我无法在远程服务器上测试文件。请帮忙。这行得通吗?
    • 感谢 Stevieb 和 Sebastien。如果我需要向远程服务器发送一个 ASCII 文件,我会执行“unix2dos -c ascii 文件”然后传输(sftp)它。但是在 sftp 文件时,它会默认为二进制格式吗?
    【解决方案3】:

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

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

    【讨论】:

    • 嗨马丁,感谢您的回复。是的,我需要将文件转换为 ASCII 格式并将文件发送到远程服务器。但我仅限于使用 SFTP 协议 Version3。
    • 不,您不需要将文件转换为“ASCII”格式。没有这样的。您需要将文件转换为目标平台使用的文本格式。
    【解决方案4】:

    感谢大家的时间和支持!!!以下是我针对给定要求申请的解决方案。

    Step1:使用NET::SFTP::Foreign模块连接服务器: $sftp_file = Net::SFTP::Foreign->new($host, $user);.

    Step2:检查目标服务器类型(unix/windows)。

    • 如果是 Unix :不需要转换,因为我是从 Unix 系统发送文件。
    • 如果是 Windows,请执行 UNIX2DOS: $sftp_file->$direction("$src", "$trgt", conversion=>'unix2dos')

    此方法将进行动态数据转换。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多