显示来自Respose.WriteFile()/ Response.ContentType的广告内容

如何显示来自“动态”aspx页面的任何添加内容?目前,我正在使用System.Web.HttpResponse“Page.Response”将存储在Web服务器上的文件写入Web请求。

这将允许用户点击 http://www.foo.com?Image= test.jpg 并在浏览器中显示图像。正如你可能知道的那样,这是围绕使用Response.ContentType进行的。

通过使用

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

我能够显示gif / jpeg / png类型的图像(我迄今为止测试过的所有图像),有点试图显示.swf或.ico文件给我一个很好的小错误。

运用

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

我可以让Flash文件播放,但后来图像混乱了。

那么,我如何轻松选择contenttype?

0
额外 编辑
意见: 3

4 答案

Yup Keith 丑陋而真实。我最终将我们将使用的MIME类型放入数据库,然后在我发布文件时将其拉出。我仍然无法相信在那里没有类型的自动列表,也没有提到MSDN中可用的内容。

我发现这个网站提供了一些帮助。

0
额外

这是我在本地Intranet上使用的解决方案的一部分。当我将它们从数据库中提取出来时,您需要收集自己的一些变量,但是您可能会从其他位置将它们拉出。

唯一的额外的,但我有一个名为 getMimeType 函数连接到数据库,并根据文件扩展名撤回正确的矿类型。如果没有找到,则默认为application / octet-stream。

// 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
额外

这很丑陋,但最好的方法是查看文件并根据需要设置内容类型:

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
额外

因为.Net 4.5可以使用

MimeMapping.GetMimeMapping

它返回指定文件名的MIME映射。

https:// msdn .microsoft.com / EN-US /库/ system.web.mimemapping.getmimemapping(v = vs.110)的.aspx

0
额外