2013-10-30 17 views
13

Tôi muốn tải một tập tin excel trực tiếp từ một trang FTP vào một dòng bộ nhớ. Sau đó, tôi muốn mở tập tin trong điều khiển FarPoint Spread bằng phương thức OpenExcel (Stream). Vấn đề của tôi là tôi không chắc chắn nếu nó có thể tải về một tập tin trực tiếp vào bộ nhớ. Bất cứ ai biết nếu điều này là có thể?Tải tập tin trực tiếp xuống bộ nhớ

+1

Có; chỉ cần sử dụng luồng. – SLaks

+0

Được rồi, vì vậy tôi có thể tải tệp từ liên kết địa chỉ web ftp trực tiếp vào một phiên bản luồng? Hoặc tôi có cần tải tệp xuống máy của người dùng trước không? Tôi thích cái cũ hơn nếu có thể. – daved

Trả lời

24

Có, bạn có thể tải xuống tệp từ FTP sang bộ nhớ.

Tôi nghĩ bạn thậm chí có thể truyền Luồng từ máy chủ FTP để được xử lý bởi FarPoint.

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

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

Sử dụng WebClient bạn có thể làm gần như giống nhau. Nói chung, việc sử dụng WebClient dễ dàng hơn nhưng cung cấp cho bạn ít tùy chọn cấu hình và kiểm soát hơn (ví dụ: Không cài đặt thời gian chờ).

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

Chúng ta có chắc chắn 'WebResponse.GetResponseStream' không xô dữ liệu vào một tệp tạm thời và trả về một' FileStream' hoặc một cái gì đó tương tự? –

+0

Nó thậm chí không bắt đầu tải xuống bất cứ thứ gì cho đến khi bạn bắt đầu đọc luồng. Tôi chắc chắn về điều này, vì nếu bạn không tiếp tục đọc trong một thời gian các máy chủ sẽ hết thời gian chờ. xem: http://msdn.microsoft.com/en-us/library/system.net.webresponse.getresponsestream(v=vs.110).aspx –

+0

cả hai câu trả lời đều hoạt động tốt đẹp! Cảm ơn! – daved

15

Hãy xem WebClient.DownloadData. Bạn có thể tải thư mục tệp xuống bộ nhớ và không ghi nó vào tệp trước.

Đây là chưa được kiểm tra, nhưng cái gì đó như:

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

Tôi không quen thuộc với Farpoint tuy nhiên, để nói hay không dòng có thể được sử dụng trực tiếp với các phương pháp OpenExcel. Online examples hiển thị phương thức được sử dụng với số FileStream, nhưng tôi cho rằng bất kỳ loại nào là Stream đều sẽ được chấp nhận.

+1

Tìm thấy điều này hữu ích cho tôi. Tôi đã cố gắng để tải về một tập tin .zip từ một trang web nhưng đã được sử dụng mới WebClient(). OpenRead (tập tin) để có được dòng nhưng nhận được một "dòng không hỗ trợ tìm kiếm hoạt động" lỗi. Dunno tại sao điều này làm việc nhưng tôi đánh giá cao nó :) – tehAon

Các vấn đề liên quan