2009-08-13 29 views
7

Tôi có trang aspx với các nút liên kết để kích hoạt javascript để mở một trang aspx mới để truyền tệp đến trình duyệt để người dùng tải xuống.Lỗi IE 7? - nhắc lưu/mở khi tải xuống tập tin - C# asp.net 3.5

Khi phát triển và kiểm tra đơn vị trên XP SP3, IE 7 và FireFox 3.5, sử dụng đoạn mã sau (chính là "đính kèm" một phần trong thẻ Content-Disposition), cả hai nhắc nhở một hộp thoại hỏi nếu tôi muốn lưu hoặc mở tài liệu, đó là chính xác những gì tôi muốn xảy ra:

 private void WriteFileToBrowser(Byte[] requestFile, string filename, String m_mimeType, String m_format) 
    { 
     Response.Clear(); 
     Response.AddHeader("Content-Disposition", "attachment;filename=" + filename + "." + m_format); 
     Response.ContentType = m_mimeType; 
     Response.BinaryWrite(requestFile); 
     Response.Flush(); 

    } 

Khi tôi triển khai này đến một máy chủ Windows 2003 và điều hướng đến các trang aspx cùng, FireFox 3.5 hỏi một cách chính xác cho một Lưu/mở tùy chọn như mong đợi vì đó là hoạt động mặc định trong FF.

Khi tôi điều hướng trong IE 7 và nhấp để tải xuống, tôi nhận được cửa sổ bật lên hiển thị cho các đỉnh thứ 1/thứ 8 ... và biến mất. Không có lời nhắc để Lưu/Mở.

Nếu tôi đi vào IE 7 -> Tools -> Internet Options -> Security -> Custom Level -> Tải xuống

tự động nhắc nhở để tải tập tin bị vô hiệu hóa. Khi tôi kiểm tra nó để cho phép tôi sau đó nhận được dấu nhắc Save/Open để hoạt động chính xác.

Vì vậy, câu hỏi của tôi là ..... có ai nhận được một công việc xung quanh này? Tôi đã thử một loạt những thứ mà mọi người yêu cầu làm việc với các thẻ Header khác nhau như cache, pragma, v.v ... không ai trong số đó nhận ra rằng IE có thuộc tính download bị vô hiệu hóa theo mặc định.

+0

Tôi đã thử một cái gì đó tương tự và nó hoạt động trong IE7,8. Bạn có thể cung cấp giá trị chính xác của m_mimeType bạn sử dụng không? –

+0

để thử nghiệm im sử dụng điều này dưới dạng mime và định dạng trong danh sách tham số "ứng dụng/pdf", "PDF" –

+0

Bạn đã thử những người khác ví dụ: application/zip Thứ mà IE7 không thể hiển thị trong cửa sổ của nó. –

Trả lời

2

Gần đây, chúng tôi đã gặp sự cố giống hệt với việc triển khai của chúng tôi để tải xuống các báo cáo được tạo trong khung web tùy chỉnh của chúng tôi. Nghiên cứu đã dẫn chúng tôi thử phương pháp tương tự mà bạn đã đề cập (thiết lập Nội dung-Bố trí).

Sự cố có liên quan đến IE7 và khu vực bảo mật. Theo mặc định, một số hành động nhất định phải được người dùng khởi tạo một cách rõ ràng. Bạn có thể bắt đầu bằng cách xem Understanding and Working in Protected Mode Internet ExplorerAbout Window Restrictions

0

Không liên quan đến vấn đề này nhưng bạn cần phải báo giá tên tệp trong đầu ra của bạn. Các khoảng trống trong tên tệp sẽ làm hỏng tên tệp khi tải xuống tệp.

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

Hãy thử này

protected void Button1_Click (object sender, EventArgs e) { Response.ContentType = "application/pdf"; Response.Clear(); Response.TransmitFile ("test.pdf"); Response.End(); }

+0

Nếu bạn thấy trong ví dụ của tôi, tệp không phải từ hệ thống tệp, một tệp byte của nó sẽ sử dụng BinaryWrite() để ghi vào trình duyệt. TransmitFile() sẽ không hoạt động trong trường hợp này trừ khi tôi tập hợp các tệp vật lý trên hệ thống. –

1

Nếu bạn muốn thêm trang của mình vào trang web đáng tin cậy, bạn có thể tải xuống tệp. Trong khi phát triển tất cả các trang web bạn đang chạy đều nằm trong vùng này.

Bạn có thể cố gắng ép buộc các trình duyệt Internet Explorer bằng cách thêm

HttpContext.Current.ApplicationInstance.CompleteRequest(); 

đến hết yêu cầu của bạn.

Khác bạn có thể thử đăng liên kết lên tài liệu, vì vậy trình duyệt sẽ xem yêu cầu dưới dạng phản hồi tương tác của người dùng.

0

Nếu không cần thiết phải mở trang mới bằng javascript, bạn có thể sử dụng Response.Redirect() đến trang aspx. Điều này sẽ mở hộp thoại lưu/mở.

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