2013-10-30 3 views
13

ftp 사이트에서 직접 메모리 스트림으로 Excel 파일을로드하고 싶습니다. 그런 다음 OpenExcel (Stream) 메서드를 사용하여 FarPoint Spread 컨트롤에서 파일을 열고 싶습니다. 내 문제는 메모리에 직접 파일을 다운로드 할 수 있는지 확실하지 않다는 것입니다. 이것이 가능한지 누구나 아십니까?파일을 메모리에 직접 다운로드하십시오.

+1

예; 그냥 스트림을 사용하십시오. – SLaks

+0

좋아, 그럼 ftp 웹 주소 링크에서 파일을 스트림 인스턴스로 직접로드 할 수 있습니까? 아니면 먼저 파일을 사용자 컴퓨터에 다운로드해야합니까? 가능하다면 전자를 선호합니다. – daved

답변

24

예, FTP에서 메모리로 파일을 다운로드 할 수 있습니다.

FTP 서버에서 스트림을 전달하여 FarPoint에서 처리 할 수 ​​있다고 생각합니다.

WebRequest request = FtpWebRequest.Create("ftp://asd.com/file"); 

using (WebResponse response = request.GetResponse()) 
{ 
    Stream responseStream = response.GetResponseStream(); 
    OpenExcel(responseStream); 
} 

WebClient를 사용하면 거의 동일하게 수행 할 수 있습니다. 일반적으로 WebClient를 사용하는 것이 더 쉽지만 적은 구성 옵션과 제어를 제공합니다 (예 : 제한 시간 설정 없음).

WebClient wc = new WebClient(); 
using (MemoryStream stream = new MemoryStream(wc.DownloadData("ftp://asd.com/file"))) 
{ 
    OpenExcel(stream); 
} 
+0

'WebResponse.GetResponseStream'은 임시 파일에 데이터를 저장하지 않고'FileStream' 또는 비슷한 것을 반환합니까? –

+0

스트림을 읽기 시작할 때까지 다운로드를 시작하지 않습니다. 서버가 시간 초과 될 때까지 잠시 동안 계속 읽지 않으면이 문제에 대해 확신합니다. 참조하십시오 : http://msdn.microsoft.com/en-us/library/system.net.webresponse.getresponsestream(v=vs.110).aspx –

+0

두 답변 모두 아름답게 작동합니다! 감사! – daved

15

WebClient.DownloadData을 살펴보십시오. 파일 디렉토리를 메모리에 다운로드하고 파일 디렉토리에 먼저 기록하지 않아야합니다.

이 검증되지 않은,하지만 뭔가 같은 :

var spreadSheetStream 
    = new MemoryStream(new WebClient().DownloadData(yourFilePath)); 

나는 스트림이 OpenExcel 방법으로 직접 사용할 수 있는지 여부를 말하고,하지만 파 포인트에 익숙하지 않다. Online examplesFileStream과 함께 사용되는 방법을 보여 주지만, 나는 어떤 종류의 Stream도 받아 들일 것으로 생각합니다.

+1

나를 찾는데 유용합니다. 웹 사이트에서 .zip 파일을 다운로드하려고했지만 새로운 WebClient()를 사용하고있었습니다. OpenRead (파일)를 사용하여 스트림을 가져 왔지만 "스트림이 탐색 작업을 지원하지 않습니다."라는 오류가 발생했습니다. Dunno는 왜이 것이 일했는지 그러나 나는 그것을 평가한다 :) – tehAon

관련 문제