2008-08-06 38 views
12

Làm cách nào để hiển thị bất kỳ nội dung bổ sung nào từ trang aspx "động"? Hiện tại tôi đang nghiên cứu sử dụng System.Web.HttpResponse "Page.Response" để viết một tệp được lưu trữ trên máy chủ web vào một yêu cầu web.Hiển thị nội dung quảng cáo từ Respose.WriteFile()/Response.ContentType

Điều này sẽ cho phép mọi người nhấn một url vào loại http://www.foo.com?Image=test.jpg và hiển thị hình ảnh trong trình duyệt của họ. Vì vậy, như bạn có thể biết điều này xoay quanh việc sử dụng Response.ContentType.

Bằng cách sử dụng

Response.ContentType = "application/octet-stream"; 

tôi có thể hiển thị hình ảnh của loại hình gif/jpeg/png (tất cả tôi đã thử nghiệm cho đến nay), cắn cố gắng để hiển thị .swf hoặc .ico file mang lại cho tôi một chút thoải mái lỗi.

sử dụng

Response.ContentType = "application/x-shockwave-flash"; 

tôi có thể nhận được file flash để chơi, nhưng sau đó những hình ảnh là điều sai lầm.

Vậy làm cách nào để tôi dễ dàng chọn loại nội dung?

Trả lời

8

Đây là xấu xí, nhưng cách tốt nhất là nhìn vào các tập tin và thiết lập các kiểu nội dung cho phù hợp:

switch (fileExtension) 
{ 
    case "pdf": Response.ContentType = "application/pdf"; break; 
    case "swf": Response.ContentType = "application/x-shockwave-flash"; break; 

    case "gif": Response.ContentType = "image/gif"; break; 
    case "jpeg": Response.ContentType = "image/jpg"; break; 
    case "jpg": Response.ContentType = "image/jpg"; break; 
    case "png": Response.ContentType = "image/png"; break; 

    case "mp4": Response.ContentType = "video/mp4"; break; 
    case "mpeg": Response.ContentType = "video/mpeg"; break; 
    case "mov": Response.ContentType = "video/quicktime"; break; 
    case "wmv": 
    case "avi": Response.ContentType = "video/x-ms-wmv"; break; 

    //and so on   

    default: Response.ContentType = "application/octet-stream"; break; 
} 
0

Đây là một phần của giải pháp tôi sử dụng trên mạng nội bộ cục bộ. Một số biến bạn sẽ phải tự thu thập khi tôi kéo chúng từ cơ sở dữ liệu nhưng bạn có thể kéo chúng từ một nơi khác.

Chỉ bổ sung nhưng tôi đã có chức năng được gọi là getMimeType kết nối với cơ sở dữ liệu và kéo trở lại loại mỏ chính xác dựa trên đuôi tệp. Điều này mặc định là ứng dụng/octet-stream nếu không tìm thấy.

// Clear the response buffer incase there is anything already in it. 
Response.Clear(); 
Response.Buffer = true; 

// Read the original file from disk 
FileStream myFileStream = new FileStream(sPath, FileMode.Open); 
long FileSize = myFileStream.Length; 
byte[] Buffer = new byte[(int)FileSize]; 
myFileStream.Read(Buffer, 0, (int)FileSize); 
myFileStream.Close(); 

// Tell the browse stuff about the file 
Response.AddHeader("Content-Length", FileSize.ToString()); 
Response.AddHeader("Content-Disposition", "inline; filename=" + sFilename.Replace(" ","_")); 
Response.ContentType = getMimeType(sExtention, oConnection); 

// Send the data to the browser 
Response.BinaryWrite(Buffer); 
Response.End(); 
0

Yup Keith xấu xí nhưng là sự thật. Tôi đã kết thúc việc đặt các kiểu MIME mà chúng ta sẽ sử dụng vào một cơ sở dữ liệu và sau đó kéo chúng ra khi tôi xuất bản một tệp. Tôi vẫn không thể tin rằng không có danh sách tự động loại ra khỏi đó hoặc không có đề cập đến những gì có sẵn trong MSDN.

Tôi tìm thấy this trang web đã cung cấp một số trợ giúp.

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