2017-12-27 803 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();