如何解决获取错误:读取输入流时出错从远程复制文件
我收到了这个奇怪的错误;调试了一段时间,我认为问题在于我正在从一个无意义的站点流式传输一个 Ghost 文件。
看看,这是错误信息:
错误:错误:WinSCP.SessionRemoteException:正在从远程复制文件 方失败。读取输入流时出错。在 WinSCP.Session.PutFile(Stream) 中的 WinSCP.OperationResultBase.Check() 流、字符串远程文件路径、传输选项选项)
我正在尝试从此站点获取最新文件:/origin/path/interfaces,复制该文件并将其粘贴到不同的服务器中,特别是在此位置:/destination/path/interfaces
似乎一切正常,我正在获取最新的文件,但我觉得有些奇怪:
它似乎是从这里读取文件:/origin/path/interfaces/TXTFILES202104101700.txt(在第一个会话中)但很奇怪,因为我无法通过指定名称来访问文件对于站点中的文件,我只能这样做:/origin/path/interfaces/
我猜这个错误是因为它试图将一个 Ghost 文件粘贴到新服务器中,它正在从这个位置“读取”“/origin/path/interfaces/TXTFILES202104101700.txt”。我无法在路由中指定文件,仅此:/origin/path/interfaces/
这是我的代码:
// Sessions options
SessionOptions SftpSource = new SessionOptions
{
Protocol = Protocol.Sftp,HostName = xxxxxxxxxxxxx,xxxxxxxx = xxxxxxxxxxxxx,xxxxxxxx = xxxxxxxxxxxxx
};
SessionOptions SftpDestination = new SessionOptions
{
Protocol = Protocol.Sftp,xxxxxxxx = xxxxxxxxxxxxx
};
using (Session sftpSessionServer1 = new Session())
using (Session SftpSessionServer2 = new Session())
{
// Connecting to SFTP first server
sftpSessionServer1.Open(SftpSource);
// Get list of files in the SFTP directory
string SftpRemoteDirectory = "/origin/path/interfaces";
RemoteDirectoryInfo directoryInfo = sftpSessionServer1.ListDirectory(SftpRemoteDirectory);
// Select the most recent file
RemoteFileInfo ultimateFile =
directoryInfo.Files
.Where(file => !file.IsDirectory)
.OrderByDescending(file => file.LastWriteTime)
.First();
// Connecting to SFTP second server
SftpSessionServer2.Open(SftpDestination);
string sSftpRemoteDirectory = "/destination/path/interfaces";
string sftpRemotePath = RemotePath.Combine(sSftpRemoteDirectory,ultimateFile.Name);
// Transfer from SFTP to SFTP
using (Stream downloadStream = sftpSessionServer1.GetFile(ultimateFile.FullName))
{
SftpSessionServer2.PutFile(downloadStream,sftpRemotePath);
}
}
来自两个会话的日志:
第一节:
< 2021-04-18 03:35:59.731 Script: -rw-r--r-- 1 myuser oinstall 1609790 Apr 10 22:56:27 2021 TXTFILES202104101700.txt
< 2021-04-18 03:35:59.731 Script: -rw-r--r-- 1 myuser oinstall 435 Feb 12 17:10:58 2021 TXTFILES202102121710.txt
< 2021-04-18 03:35:59.731 Script: -rw-r--r-- 1 myuser oinstall 3722440 Apr 12 10:48:20 2018 TXTFILES20180412.txt
< 2021-04-18 03:35:59.731 Script: -rw-r--r-- 1 myuser oinstall 890092 Dec 20 10:58:54 2018 TXTFILES20181220.txt
> 2021-04-18 03:36:04.032 Script: get -nopermissions -preservetime -transfer="binary" -onlyfile -- "/origin/path/interfaces/TXTFILES202104101700.txt" "-"
. 2021-04-18 03:36:04.033 Listing file "/origin/path/interfaces/TXTFILES202104101700.txt".
> 2021-04-18 03:36:04.033 Type: SSH_FXP_LSTAT,Size: 68,Number: 1543
< 2021-04-18 03:36:04.049 Type: SSH_FXP_STATUS,Size: 24,Number: 1284
. 2021-04-18 03:36:04.049 Discarding reserved response
< 2021-04-18 03:36:04.059 Type: SSH_FXP_ATTRS,Size: 37,Number: 1543
. 2021-04-18 03:36:04.059 TXTFILES202104101700.txt;-;1609790;2021-04-11T01:56:27.000Z;3;"" [501];"" [503];rw-r--r--;0
. 2021-04-18 03:36:04.059 Copying 1 files/directories to local directory "" - total size: 1.609.790
. 2021-04-18 03:36:04.059 PrTime: Yes; PrRO: No; Rght: rw-r--r--; PrR: No (No); FnCs: N; RIC: 0100; Resume: S (102400); CalcS: No; Mask: *.*
. 2021-04-18 03:36:04.059 TM: B; ClAr: No; RemEOF: No; RemBOM: No; CPS: 0; NewerOnly: No; EncryptNewFiles: Yes; ExcludeHiddenFiles: No; ExcludeEmptyDirectories: No; InclM: ; ResumeL: 0
. 2021-04-18 03:36:04.059 AscM: *.*html; *.htm; *.txt; *.php; *.php3; *.cgi; *.c; *.cpp; *.h; *.pas; *.bas; *.tex; *.pl; *.js; .htaccess; *.xtml; *.css; *.cfg; *.ini; *.sh; *.xml
. 2021-04-18 03:36:04.060 File: '/origin/path/interfaces/TXTFILES202104101700.txt' [2021-04-11T01:56:27.000Z] [1609790]
. 2021-04-18 03:36:04.060 Streaming "/origin/path/interfaces/TXTFILES202104101700.txt" to local machine started.
. 2021-04-18 03:36:04.060 Binary transfer mode selected.
. 2021-04-18 03:36:04.060 Opening remote file.
> 2021-04-18 03:36:04.060 Type: SSH_FXP_OPEN,Size: 76,Number: 1795
< 2021-04-18 03:36:04.073 Type: SSH_FXP_HANDLE,Size: 13,Number: 1795
> 2021-04-18 03:36:04.073 Type: SSH_FXP_FSTAT,Number: 2056
< 2021-04-18 03:36:04.085 Type: SSH_FXP_ATTRS,Number: 2056
> 2021-04-18 03:36:04.085 Type: SSH_FXP_READ,Size: 25,Number: 2309
< 2021-04-18 03:36:04.930 Status code: 1
. 2021-04-18 03:36:04.930 132 skipped SSH_FXP_WRITE,SSH_FXP_READ,SSH_FXP_DATA and SSH_FXP_STATUS packets.
> 2021-04-18 03:36:04.930 Type: SSH_FXP_CLOSE,Number: 23300
< 2021-04-18 03:36:04.930 Type: SSH_FXP_STATUS,Size: 28,Number: 15365
< 2021-04-18 03:36:04.930 Type: SSH_FXP_STATUS,Number: 15621
< 2021-04-18 03:36:04.930 Type: SSH_FXP_STATUS,Number: 15877
< 2021-04-18 03:36:04.930 Type: SSH_FXP_STATUS,Number: 16133
< 2021-04-18 03:36:04.930 Type: SSH_FXP_STATUS,Number: 16389
< 2021-04-18 03:36:04.931 Type: SSH_FXP_STATUS,Number: 16645
< 2021-04-18 03:36:04.931 Type: SSH_FXP_STATUS,Number: 16901
< 2021-04-18 03:36:04.931 Type: SSH_FXP_STATUS,Number: 17157
< 2021-04-18 03:36:04.931 Type: SSH_FXP_STATUS,Number: 17413
< 2021-04-18 03:36:04.931 Type: SSH_FXP_STATUS,Number: 17669
< 2021-04-18 03:36:04.931 Type: SSH_FXP_STATUS,Number: 17925
< 2021-04-18 03:36:04.931 Type: SSH_FXP_STATUS,Number: 18181
< 2021-04-18 03:36:04.931 Type: SSH_FXP_STATUS,Number: 18437
< 2021-04-18 03:36:04.931 Type: SSH_FXP_STATUS,Number: 18693
< 2021-04-18 03:36:04.931 Type: SSH_FXP_STATUS,Number: 18949
< 2021-04-18 03:36:04.931 Type: SSH_FXP_STATUS,Number: 19205
< 2021-04-18 03:36:04.931 Type: SSH_FXP_STATUS,Number: 19461
< 2021-04-18 03:36:04.931 Type: SSH_FXP_STATUS,Number: 19717
< 2021-04-18 03:36:04.931 Type: SSH_FXP_STATUS,Number: 19973
< 2021-04-18 03:36:04.931 Type: SSH_FXP_STATUS,Number: 20229
< 2021-04-18 03:36:04.931 Type: SSH_FXP_STATUS,Number: 20485
< 2021-04-18 03:36:04.931 Type: SSH_FXP_STATUS,Number: 20741
< 2021-04-18 03:36:04.931 Type: SSH_FXP_STATUS,Number: 20997
< 2021-04-18 03:36:04.932 Type: SSH_FXP_STATUS,Number: 21253
< 2021-04-18 03:36:04.932 Type: SSH_FXP_STATUS,Number: 21509
< 2021-04-18 03:36:04.932 Type: SSH_FXP_STATUS,Number: 21765
< 2021-04-18 03:36:04.932 Type: SSH_FXP_STATUS,Number: 22021
< 2021-04-18 03:36:04.932 Type: SSH_FXP_STATUS,Number: 22277
< 2021-04-18 03:36:05.000 Type: SSH_FXP_STATUS,Number: 22533
< 2021-04-18 03:36:05.012 Type: SSH_FXP_STATUS,Number: 22789
< 2021-04-18 03:36:05.100 Type: SSH_FXP_STATUS,Number: 23045
. 2021-04-18 03:36:05.100 Transfer done: '/origin/path/interfaces/TXTFILES202104101700.txt' => '-' [1609790]
. 2021-04-18 03:36:05.101 Copying finished: Transferred: 1.609.790,Elapsed: 0:00:01,CPS: 1.684.869/s
> 2021-04-18 03:36:06.027 Script: exit
. 2021-04-18 03:36:06.028 Script: Exit code: 0
. 2021-04-18 03:36:06.028 Closing connection.
. 2021-04-18 03:36:06.028 Sending special code: 1
. 2021-04-18 03:36:06.040 Session sent command exit status 0
. 2021-04-18 03:36:06.040 Main session channel closed
. 2021-04-18 03:36:06.040 All channels closed
第二场:
"/origin/path/interfaces/TXTFILES202104101700.txt"
. 2021-04-18 03:36:04.244 Copying 1 files/directories to remote directory "/destination/path/interfaces/" - total size: 0
. 2021-04-18 03:36:04.244 PrTime: Yes; PrRO: No; Rght: rw-r--r--; PrR: No (No); FnCs: N; RIC: 0100; Resume: S (102400); CalcS: No; Mask: TXTFILES202104101700.txt
. 2021-04-18 03:36:04.244 TM: B; ClAr: No; RemEOF: No; RemBOM: No; CPS: 0; NewerOnly: No; EncryptNewFiles: Yes; ExcludeHiddenFiles: No; ExcludeEmptyDirectories: No; InclM: ; ResumeL: 0
. 2021-04-18 03:36:04.244 AscM: *.*html; *.htm; *.txt; *.php; *.php3; *.cgi; *.c; *.cpp; *.h; *.pas; *.bas; *.tex; *.pl; *.js; .htaccess; *.xtml; *.css; *.cfg; *.ini; *.sh; *.xml
. 2021-04-18 03:36:04.244 File: 'TXTFILES202104101700.txt' [n/a] [0]
. 2021-04-18 03:36:04.244 Streaming "TXTFILES202104101700.txt" to remote directory started.
. 2021-04-18 03:36:04.244 Binary transfer mode selected.
. 2021-04-18 03:36:04.244 Opening remote file.
> 2021-04-18 03:36:04.244 Type: SSH_FXP_OPEN,Size: 84,Number: 259
< 2021-04-18 03:36:04.301 Type: SSH_FXP_HANDLE,Number: 259
> 2021-04-18 03:36:04.321 Type: SSH_FXP_WRITE,Size: 32761,Number: 774
. 2021-04-18 03:36:05.446 53 skipped SSH_FXP_WRITE,SSH_FXP_DATA and SSH_FXP_STATUS packets.
> 2021-04-18 03:36:05.446 Type: SSH_FXP_CLOSE,Number: 7684
< 2021-04-18 03:36:05.457 Type: SSH_FXP_STATUS,Number: 7684
< 2021-04-18 03:36:05.457 Status code: 0
> 2021-04-18 03:36:05.457 Type: SSH_FXP_REMOVE,Number: 7949
< 2021-04-18 03:36:05.469 Type: SSH_FXP_STATUS,Number: 7949
< 2021-04-18 03:36:05.469 Status code: 0
* 2021-04-18 03:36:05.469 (ECommand) **Copying files from remote side failed**
* 2021-04-18 03:36:05.469 Failure reading network stream.
. 2021-04-18 03:36:05.470 Script: Failed
> 2021-04-18 03:36:05.924 Script: exit
. 2021-04-18 03:36:05.925 Increasing send buffer from 262144 to 524288
. 2021-04-18 03:36:05.925 Script: Exit code: 1
. 2021-04-18 03:36:05.925 Closing connection.
. 2021-04-18 03:36:05.925 Sending special code: 1
. 2021-04-18 03:36:05.937 Session sent command exit status 0
. 2021-04-18 03:36:05.937 Main session channel closed
. 2021-04-18 03:36:05.937 All channels closed
我该如何解决这个问题?我有点迷茫
解决方法
在修复发布之前,如果文件不是太大,您可以通过将文件复制到内存缓冲区来临时解决它:
// Transfer from SFTP to SFTP
using (Stream downloadStream = sftpSessionServer1.GetFile(ultimateFile.FullName))
using (Stream memoryStream = new MemoryStream())
{
downloadStream.CopyTo(memoryStream);
memoryStream.Position = 0;
SftpSessionServer2.PutFile(memoryStream,sftpRemotePath);
}
如果文件很大,您必须先将其下载到本地临时文件中,然后再上传。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。