2012-01-17 35 views
16

Tôi đang viết một trang thử nghiệm đơn giản để tải xuống tệp văn bản cho trình duyệt khi nhấp vào nút. Tôi nhận được một lỗi thực sự lạ mà tôi chưa bao giờ thấy trước đây. Có suy nghĩ gì không?ASP.Net Tải tập tin xuống trình duyệt của khách hàng

Lỗi xảy ra trên 'Response.End();' và các tập tin không bao giờ được đến trình duyệt client

Code:

string filePath = "C:\\test.txt"; 
    FileInfo file = new FileInfo(filePath); 
    if (file.Exists) 
    { 
    Response.ClearContent(); 
    Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name); 
    Response.AddHeader("Content-Length", file.Length.ToString()); 
    Response.ContentType = "text/plain"; 
    Response.TransmitFile(file.FullName); 
    Response.End(); 
    } 

Lỗi:

Unable to evaluate expression because the code is optimized or a native frame is on top of the call stack.

+1

xóa kết thúc và thử Responce.Flush() và Responce.ApplicationInstance.CompleteRequest(); – Aristos

+0

Cuộc gọi tốt, điều đó đã ngăn không cho ngoại lệ bị ném. Nhưng mã vẫn hoàn thành mà không có bất cứ điều gì xảy ra trên trình duyệt. ?? – tier1

Trả lời

26

Hãy thử thay đổi nó.

Response.Clear(); 
Response.ClearHeaders(); 
Response.ClearContent(); 
Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name); 
Response.AddHeader("Content-Length", file.Length.ToString()); 
Response.ContentType = "text/plain"; 
Response.Flush(); 
Response.TransmitFile(file.FullName); 
Response.End(); 
+0

Tương tự như trước, chạy qua mã và ném một ngoại lệ trên Response.End(). Có vẻ lạ khi Response.TransmitFile thực hiện ok nhưng tệp không được chuyển? – tier1

+0

Thực ra, công trình này hoạt động. Cảm ơn! – tier1

+1

@Ashwin: Tôi đang thử giải pháp này trong tệp mã-đằng sau của tôi (vấn đề của tôi là http://stackoverflow.com/questions/18599735/downloading-a-dynamic-file), nhưng bất kể tôi cố gọi ở đâu TransmitFile() 'hoặc' WriteFile() 'Tôi tiếp tục nhận được ngoại lệ: ** Máy chủ không thể đặt loại nội dung sau khi tiêu đề HTTP đã được gửi. ** Bất kỳ đề xuất nào? –

7

Chỉ cần một bổ sung nhỏ về giải pháp trên nếu bạn đang gặp vấn đề với tên tải tập tin của ...

Response.AddHeader("Content-Disposition", "attachment; filename=\"" + file.Name + "\""); 

này sẽ trở lại với tên file chính xác ngay cả khi nó chứa dấu cách hoặc các ký tự khác.

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