Re[2]: Content type для файла
От: Duke_Nuken Украина  
Дата: 21.12.07 22:04
Оценка:
Да, работает довольно не плохо. Вот только с этими хендлерами попутно еще одна проблемма.
Дето в том что когда запрашиваеться файл и он отдаеться через хендлер, то как при сохранении
указать его оригинальное имя. Тоесть например файл my.mp3 и запрос на него www.something.com/file.ashx?filename=my.mp3
то когда хендлер вычитает этот файл и отдаст его в респорс, то браузер предложит его сохранить,
но имя файла для сохранения будет file.ashx, а не my.mp3. Как то это можно изменить?


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


R>PS Прикрутил MimeDetector к своему BinaryHandler-у минут за 30 — работает отлично, жалоб не имею.
http://FreeMusicLib.com — мой сайт с бесплатной музыкой доступной для скачивания
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.