Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / MVC - Браузеры не показывают расширение файлов .chm при загрузке / 15 сообщений из 15, страница 1 из 1
05.06.2012, 16:28
    #37826294
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVC - Браузеры не показывают расширение файлов .chm при загрузке
Возвращаю файл обычным методом (пробовал два варианта):

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
public FileResult DownloadContent(...)
{
    return File(fileContent, "application/x-chm", "fileName");
}

public FileResult DownloadContent(...)
{
    return File(fileContent, "application/x-chm", "fileName.chm");
}



Но в любом случае браузер пишет, что мол не знаю такого приложения и расширение не показывает. Пробовал в Опере и ИЕ. Лишь когда в Опере указал в настройках (Tools - Preferences - Downloads - Add - File Type), что такой тип файлов существует, так она стала добавлять и расширения, и программу сразу узнала, что такая существует (HTML Help называется).

Как сделать так, чтобы браузеры сразу понимали, что я им такой файл посылаю? Я же им и MIME-тип, и даже расширение руками приписал к имени файла (во втором случае). Разве этого недостаточно, чтобы просто приписать расширение к имени файла и не заставлять пользователя гадать, что это я ему за фигню подсовываю, о которой даже браузер не знает. Ведь не заставишь же каждого пользователя в своём браузере добавить настройки для закачек этого типа файлов, а по умолчанию этих настроек в браузерах почему-то нет.
...
Рейтинг: 0 / 0
05.06.2012, 16:41
    #37826322
SanSYS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVC - Браузеры не показывают расширение файлов .chm при загрузке
Response.AppendHeader("content-disposition", "attachment; filename=" + Server.HtmlEncode(myFilename));
...
Рейтинг: 0 / 0
05.06.2012, 19:59
    #37826611
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVC - Браузеры не показывают расширение файлов .chm при загрузке
SanSYS, это мвц :)
...
Рейтинг: 0 / 0
05.06.2012, 20:25
    #37826631
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVC - Браузеры не показывают расширение файлов .chm при загрузке
МСУSanSYS, это мвц :)
Да, МВЦ. А что, там по-другому? Вроде, знакомые штучки - респонс там, ХТМЛэнкоде всякие - завтра попробую.

А как в МВЦ тогда правильно это сделать?
...
Рейтинг: 0 / 0
05.06.2012, 20:35
    #37826641
SanSYS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVC - Браузеры не показывают расширение файлов .chm при загрузке
МСУSanSYS, это мвц :)
Эх, точно!
...
Рейтинг: 0 / 0
05.06.2012, 20:52
    #37826660
SanSYS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVC - Браузеры не показывают расширение файлов .chm при загрузке
user7320МСУSanSYS, это мвц :)
Да, МВЦ. А что, там по-другому? Вроде, знакомые штучки - респонс там, ХТМЛэнкоде всякие - завтра попробую.

А как в МВЦ тогда правильно это сделать?
Хм.. попробуй тип указать application/octet-stream ну или MediaTypeNames.Application.Octet
...
Рейтинг: 0 / 0
05.06.2012, 20:54
    #37826663
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVC - Браузеры не показывают расширение файлов .chm при загрузке
user7320Да, МВЦ. А что, там по-другому? Вроде, знакомые штучки - респонс там, ХТМЛэнкоде всякие - завтра попробую.
А как в МВЦ тогда правильно это сделать?
ControllerContext.HttpContext

Код: c#
1.
2.
3.
4.
5.
6.
7.
public class ... : ActionResult     
{          
    public override void ExecuteResult(ControllerContext context)         
    {
        ...
    }
} 
...
Рейтинг: 0 / 0
07.06.2012, 16:35
    #37829819
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVC - Браузеры не показывают расширение файлов .chm при загрузке
Я не очень понял код, который вы мне предлагаете, но я так понял, что надо поработать с заголовками ХТТП.

Вобщем, проблема частично решилась - это я по невнимательности не туда посмотрел и не тот код запустил. Короче говоря, если указать расширение файла в его имени, как во втором варианте у меня в первом посте, то все нормальные браузеры всё понимают и правильно определяют тип файлов... Но есть такая вещь, как ИЕ 8 - ему не только не хватает расширения в имени, но даже если указать перед отправкой файла заголовок с инфой о типе отправляемых данных в ответе, он всё равно ничего не понимает:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
[HttpGet]
public FileResult DownloadContent(..., Guid? entityId, ...)
{           
	...// fileToDownload initialization
	
	HttpContext.Response.AddHeader("Content-Type", application/x-chm);

	return File(fileToDownload.Content, fileToDownload.MIME, fileToDownload.NameWithExtension);
}



ИЕ 8 пишет при попытке загрузки, что "Тип: неизвестный тип файла", а имя почему-то совпадает с параметром entityId действия DownloadContent. Я не могу понять логику ИЕ - а почему id, почему не какой-нибудь другой параметр (там их три, причём два оставшихся - стринговые)?

Далее, при попытке сохранить на диске, когда выбирается, в какой каталог сохранить, он в имени файла пишет этот айдишник без расширения (нормальные браузеры пишут имя файла с расширением - fileToDownload.NameWithExtension), а в типе файла - "Все типы файлов", как будто я ему MIME не посылаю.

Что ещё нужно указать ИЕ, чтобы он понял, что это chm?
...
Рейтинг: 0 / 0
07.06.2012, 16:36
    #37829824
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVC - Браузеры не показывают расширение файлов .chm при загрузке
-- HttpContext.Response.AddHeader("Content-Type", application/x-chm);
На самом деле
Код: c#
1.
HttpContext.Response.AddHeader("Content-Type", "application/x-chm");
...
Рейтинг: 0 / 0
07.06.2012, 16:40
    #37829832
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVC - Браузеры не показывают расширение файлов .chm при загрузке
Да, кстати, я в дебаге глянул - если не указать явно заголовок с типом контента, то параметр Response.ContentType будет "text/html", что, однако, не мешает нормальным браузерам распознать файл при загрузке. А вот почему FileResult в MVC при возврате не устанавливает заголовки? Или это что-то типа устаревших формальностей и для нормальных браузеров не нужно?
...
Рейтинг: 0 / 0
07.06.2012, 18:10
    #37830036
SanSYS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVC - Браузеры не показывают расширение файлов .chm при загрузке
user7320Я не очень понял код, который вы мне предлагаете, но я так понял, что надо поработать с заголовками ХТТП...
МСУ, должно быть, имел ввиду то, что необходимо использовать контекст предоставленный контроллером, подозреваю что это просто this.Context
...
Рейтинг: 0 / 0
07.06.2012, 21:35
    #37830233
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVC - Браузеры не показывают расширение файлов .chm при загрузке
Да, имелось ввиду юзать из контекста. Или свой ActionResult / FileResult сделать под конкретный экшен.
...
Рейтинг: 0 / 0
08.06.2012, 10:08
    #37830544
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVC - Браузеры не показывают расширение файлов .chm при загрузке
SanSYSМСУ, должно быть, имел ввиду то, что необходимо использовать контекст предоставленный контроллером, подозреваю что это просто this.Context
МСУДа, имелось ввиду юзать из контекста. Или свой ActionResult / FileResult сделать под конкретный экшен.
Ну я его и использую. А дальше-то как? Там выше человек написал что-то, связанное с заголовками, как я понял. В свойствах контекста есть функция добавления заголовков (я написал), но как и что написать, чтобы ИЕ понял, что это у меня за файл, я не знаю. Я самый очевидный заголовок добавил - ИЕ не понял. Опера и Фаер Фокс понимают всё и без заголовков, а Фаер Форкс - даже без регистрации в нём такого типа файлов расширения и MIME'а.

Я хочу, чтобы ИЕ понимал этот файл без дополнительной работы по его настройке - юзер же не будет настраивать свой браузер, чтобы понять, что за фигню он у меня пытается загрузить.
...
Рейтинг: 0 / 0
08.06.2012, 10:29
    #37830599
user7320
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVC - Браузеры не показывают расширение файлов .chm при загрузке
А, понял:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
[HttpGet]
public FileResult DownloadContent(...)
{
	FileToDownloadModel fileToDownload = ...;

	HttpContext.Response.AppendHeader(
		"content-disposition",
		"attachment; filename=" + HttpUtility.UrlPathEncode(fileToDownload.Name));

	return File(fileToDownload.Content, fileToDownload.MIME, fileToDownload.Name);
}
...
Рейтинг: 0 / 0
08.06.2012, 11:28
    #37830710
МСУ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MVC - Браузеры не показывают расширение файлов .chm при загрузке
user7320, RTFM. Уже всё сказано.
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / MVC - Браузеры не показывают расширение файлов .chm при загрузке / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]