【问题标题】:Handler (MIME) for multimedia content not working多媒体内容的处理程序 (MIME) 不起作用
【发布时间】:2015-10-13 19:07:18
【问题描述】:

我正在使用在页面中呈现多媒体内容的处理程序。

这个想法是这个处理程序访问文件并使用扩展名确定类型,并呈现它,问题是大多数时候处理程序本身被下载 并且没有显示多媒体。

代码如下:

FileInfo file = new FileInfo(filePath);
byte[] bytes = new byte[file.Length];
using (FileStream fs = file.OpenRead())
{
    fs.Read(bytes, 0, bytes.Length);
}

string extension = Path.GetExtension(filePath);
string mimeDeclaration;
if (".tif" == extension)
    mimeDeclaration = "tiff";
string[] imagenes = new string[] {".jpg", ".jpeg", ".bmp", ".gif", ".png"};
if (imagenes.Any(x => x.Contains(extension)))
    mimeDeclaration = extension.Substring(1);
else
    mimeDeclaration = string.Empty;

context.Response.ClearContent();
context.Response.ClearHeaders();
context.Response.ContentType = "image/" + mimeDeclaration;
context.Response.BinaryWrite(bytes);

filePath 变量有效。

您能帮我避免处理程序不呈现多媒体内容吗?

【问题讨论】:

  • 什么是“意外动作”?
  • 问题是什么?
  • 问题是handler.cs被下载了
  • 检查filePath也许是错误的文件。
  • @Bauss 不幸的是,情况并非如此:(

标签: c# handler mime-types mime


【解决方案1】:

我想我现在明白了,当 mimeDeclaration 为空或错误时,您将无法下载图像。

这发生在您的代码中,因为图像的 MIME 类型总是“image/”加上文件扩展名:

context.Response.ContentType = "image/" + mimeDeclaration;

例如 .jpg 图像是

图像/JPEG

否则,可能是因为它是 tiff 图像,在这种情况下,您的 else 子句将 mimeDeclaration 设置回空字符串。

提示:通过文件扩展名检测 MIME 类型不太理想,请查看我在这里的操作方式:Alternative to FindMimeFromData method in Urlmon.dll one which has more MIME types

【讨论】:

  • 其实不存在收不到图片的情况,因为如果是视频,还有另外一条路径可以处理。
  • 但是如果你想要一个 jpg,它就不会被正确地提供,因为 image/jpg 不是正确的 mime 类型。 jpg 的正确 mime 类型是 image/jpeg
  • @DanielV 我相信您已经测试过这个解决方案。它是否帮助您解决了问题?您需要进一步的帮助吗?
  • 这个MIME class 帮助我改进了代码。
  • 嗯,与 Winista 的二进制分析相比,这简直是垃圾。
猜你喜欢
  • 2016-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-25
  • 1970-01-01
相关资源
最近更新 更多