#c# #asp.net-core-mvc #content-type
#c# #asp.net-core-mvc #content-type
Вопрос:
В моем базовом приложении MVC в моем контроллере есть способ для пользователя загрузить сохраненное мной изображение, которое вызывается нажатием кнопки в моем представлении. Я не понимаю, зачем мне нужна вторая переменная «ContentType» string в моем возвращаемом файле(). Я все еще могу загрузить изображение в формате .jpg, если я введу «application / pdf» вместо «application / jpg», так какой вообще смысл иметь его, кроме того факта, что оно требуется. В чем смысл этой переменной?
public FileStreamResult Download()
{
string filename = "Capture.JPG";
string filepath = hostingEnvironment.WebRootPath "\Image";
string fullName = Path.Combine(filepath, filename);
return File(new FileStream(fullName, FileMode.Open), "application/pdf", filename);
}
Комментарии:
1. Чтобы он знал, какой файл возвращать. Я не эксперт в этом, но я бы предположил, что именно так (частично) вы указываете браузеру отличать файл от просто другой веб-страницы, и браузер достаточно умен, чтобы знать, что делать с разными типами файлов.
2. Кроме того, файлы могут быть достаточно похожими, где некоторые операции (например, загрузка файла) могут работать для обоих. Но многие браузеры имеют возможности предварительного просмотра, и это приведет к сбою, если вы попытаетесь просмотреть PDF-файл в браузере, который ожидает JPG.
3. Но тогда я не понимаю, почему application / zip или application / json все равно будут работать, поскольку они очень разные?
4. Код должен знать тип, например: двоичный, xml, текст или json, чтобы сервер знал, как декодировать, и этот тип кодируется (строка base64). Вероятно, не имеет значения, какой тип двоичного файла, если это jpg или pdf. Но нужно знать, когда это другие типы.
5. Браузер (он же «агент пользователя») может просмотреть тип содержимого и решить, как его следует интерпретировать. Например, если вы загружаете файл PDF (
"application/pdf
), браузер может загрузить файл и запустить программу просмотра PDF, например, или программу просмотра изображений дляapplication/pdf
. Сервер может лгать, но браузер ожидает, что он скажет правду, и может использовать эту информацию, чтобы сделать что-то конкретное для типа контента
Ответ №1:
Комментарий Flydog весьма уместен; возможно, самое полезное или очевидное отличие, которое вы найдете в объявлении типа контента, заключается в том, что браузер может использовать его для вызова другого поведения в зависимости от настройки. Если вы отправляете видео в формате mp4 как «video / mp4», браузер вполне может воспроизвести его в своем окне просмотра. Если вы отправляете тот же файл, что и «application / octet-stream», он может предложить сохранить как. Если вы указываете один тип контента, а на самом деле это другой, скорее всего, браузер проигнорирует вас (примечание: утверждение, что pdf — это pdf или поток октетов, являются разумными / истинными. Утверждение, что это пробежка, нет). Расположение содержимого также играет определенную роль на сервере, чтобы дать браузеру некоторое представление о том, что делать с файлом..
..но в первую очередь я бы сказал, что веской причиной рассказать правду о типе контента (т. Е. Не утверждать, что это jpg, когда это pdf) является мантра взаимодействия «когда это соответствует стандартам, будьте строги в том, что вы отправляете, и либеральны в том, что вы принимаете» — выотправка, поэтому следуйте протоколу 🙂