Re: Content type для файла
От: rsn81 Россия http://rsn81.wordpress.com
Дата: 20.12.07 03:59
Оценка: 4 (2)
Здравствуйте, Duke_Nuken, Вы писали:

D_N>Как тут быть?

Взять компонент MimeDetector, в обработчике (System.Web.IHttHandler) выдавать поток бинарного файла пачками, к примеру, по 100 байт так:
context.Response.BinaryWrite(bytes);
По первым 100 байтам (на самом деле хватит и меньше; то есть как у вас написано — не делайте, возможны тормоза) определить Content-Type примерно таким кодом:
private static string GetContentType(byte[] bytes) {
    MimeTypes types = (MimeTypes) HttpRuntime.Cache["mimeTypes"];
    if (types == null) {
        types = new MimeTypes();
        HttpRuntime.Cache["mimeTypes"] = types;
    }
    sbyte[] data = SupportUtil.ToSByteArray(bytes);
    MimeType type = types.GetMimeType(data);
    if (type != null)
        return type.Name;
    return string.Empty;
}
Стоит это хозяйство кэшировать, иначе при каждом определении MimeDetector будет заново зачитывать свой конфигурационный файл (в нем хранится соответствие Content-Type и заголовка, можно свои типы добавлять, в принципе).

PS Прикрутил MimeDetector к своему BinaryHandler-у минут за 30 — работает отлично, жалоб не имею.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.