2017-12-27 543 views
-3

我试图使用C#和asp.net下载SFTP文件(.csv),但所有示例都需要我有一个远程文件目录。ASP.NET使用浏览器下载SFTP文件

对于这种情况,我需要浏览器下载文件,而不是放在目录中,因为浏览器(客户端)无法直接将文件放入目录。

有没有人以前做过这个?

我试图使用SSH.NET,但没有找到办法做到这一点。

+0

“一个SFTP文件”。 SFTP是Secure FTP协议,不是一种文件类型。完全不清楚你在问什么,或者它是如何与ASP.NET相关的。 –

+0

除非浏览器能够使用SFTP(你可能不能依赖的东西),否则浏览器将不会涉及到这一点。你的服务器需要适当的库。它需要下载文件,然后允许用户像从其他文件一样从Web服务器下载文件。 – mason

+0

您可以考虑编写能SFTP服务器流的文件并立即写字节到HTTP响应流中,因此,你的服务器成为代表一个浏览器的适配器(不理解SFTP)的处理程序和SFTP服务器(这不明白http) –

回答

0

解决了这个,通过SFTP将文件移动到我的服务器,然后normaly下载文件。

string host = @"host"; 
     string username = "user"; 
     string password = "pass"; 
     string remoteDirectory = "/remote"; 

     string localDirectory = Server.MapPath(@"\pdf\"); 

     using (var sftp = new SftpClient(host, username, password)) 
     { 
      sftp.Connect(); 
      var files = sftp.ListDirectory(remoteDirectory); 

      foreach (var file in files) 
      { 
       string remoteFileName = file.Name; 
       if (remoteFileName == "APADEAATTT.csv") 
       { 

        using (Stream file1 = File.OpenWrite(localDirectory + "APADEAATTT.csv")) 
        { 
         sftp.DownloadFile(remoteDirectory + "APADEAATTT.csv", file1); 
        } 
       } 
      } 

     } 

     FileInfo fileInfo = new FileInfo(localDirectory+"APADEAATTT.csv"); 
     Response.Clear(); 
     Response.AddHeader("Content-Disposition", "attachment;filename=" + fileInfo.Name); 
     Response.AddHeader("Content-Length", fileInfo.Length.ToString()); 
     Response.ContentType = "text/csv"; 
     Response.Flush(); 
     Response.WriteFile(fileInfo.FullName); 
     Response.End();