2014-09-30 38 views
0

我想使用.NET通过SFTP传输文件。我遇到的问题是,由于安全性非常严格,我永远无法将此文件写入到我们环境中的磁盘(这意味着我不能将其上传到SFTP,因为它会将文件写入磁盘)。客户端已经在检索文件并从SFTP处理我们的文件,所以我不希望他们不得不改变任何东西。使用.NET可以通过SFTP按需流式传输文件吗?

我想,如果这是可能的,我将不得不使用第三方库,所以任何使用第三方库的解决方案都可以接受。

关于这是否可能,以及如何完成的任何想法?

谢谢:)

注意

从一个答案我正要磁盘的事情很清楚不知道。澄清: 我们不允许在我们的环境中将文件写入磁盘,并且这包括FTP服务器

注意

可能可以配置我们的SFTP服务器(粉碎FTP)未写入到磁盘(或至少将文件写入到磁盘加密并发送解密)。这意味着只需流式传输到正确配置的SFTP服务器即可解决问题。

我的解决方案

考虑给出的答案,并做进一步的研究后,我的解决方案很可能会使用第三方库像http://sshnet.codeplex.com/,并配置了SFTP server它写入磁盘之前对文件进行加密,并在发送时对其解密。

+0

如何设想上传文件不会保存在磁盘中,但客户端将通过url访问它? – Reniuz 2014-09-30 11:08:18

+0

这就是我想找到的。 – 2014-09-30 11:15:32

回答

0

我相信大多数第三方库在上传数据时都将Stream对象用作数据源,并且您可以使用MemoryStream的一个实例。

+0

谢谢尤金。你知道我想按需将文件流式传输到客户端,而不是上传它,因为我们不允许将文件写入磁盘? – 2014-09-30 11:26:05

+0

@StephenOberauer方向无关紧要,并且在两种情况下方法都是相同的:下载时,可以流式传输到MemoryStream实例,或使用ReadRemoteFile()方法(而不是WriteRemoteFile())获取大块数据并写入它在你需要的地方。 – 2014-09-30 13:19:22

+0

我接受这个答案的基础是假设还必须配置一个人的SFTP服务器不要将文件写入磁盘,或者在这样做时加密它。 – 2014-10-01 08:53:28

1

您是否考虑过允许sftp客户端访问虚拟硬盘位置?将文件写入ramdisk,并让客户端从ramdisk中检索它。

+0

我认为你的意思是SFTP服务器。谢谢...好主意:) – 2014-09-30 12:53:57