2017-12-27 33 views
-3

C# 및 asp.net을 사용하여 SFTP 파일 (.csv)을 다운로드하려고했지만 모든 예제에서 원격 파일 디렉토리가 있어야합니다.ASP.NET 브라우저를 사용하여 SFTP 파일 다운로드

이 경우 브라우저 (클라이언트)가 파일을 디렉토리에 직접 넣을 수 없기 때문에 브라우저에 파일을 다운로드해야합니다.

누구나 전에 해본 적이 있습니까?

SSH.NET을 사용하려고했지만 그 방법을 찾지 못했습니다.

+0

"SFTP 파일" SFTP는 프로토콜의 하나 인 Secure FTP입니다. 여러분이 묻는 질문이나 ASP.NET과의 관계가 완전히 불분명합니다. –

+0

브라우저에 SFTP로 작업 할 수있는 기능이 없으면 (브라우저에 의존 할 수없는 경우) 브라우저에이 기능이 포함되지 않습니다. 서버에 적절한 라이브러리가 필요합니다. 파일을 다운로드 한 다음 사용자가 다른 파일과 마찬가지로 웹 서버에서 파일을 다운로드 할 수있게해야합니다. – 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();