Как отобразить какой-либо дополнительный контент со «динамической» страницы aspx? В настоящее время я работаю над использованием System.Web.HttpResponse «Page.Response» для записи файла, который хранится на веб-сервере, в веб-запрос.
Это позволило бы людям переходить по URL- адресу типа http://www.foo.com?Image=test.jpg и отображать изображение в своем браузере. Итак, как вы, возможно, знаете, это вращается вокруг использования Response.ContentType.
Используя
Response.ContentType = "application/octet-stream";
Я могу отображать изображения типа gif / jpeg / png (все, что я тестировал до сих пор), попытка отобразить файлы .swf или .ico дает мне небольшую ошибку.
с помощью
Response.ContentType = "application/x-shockwave-flash";
Я могу получить флэш-файлы для воспроизведения, но тогда изображения перепутаны.
Так как же мне легко выбрать тип контента?
Это некрасиво, но лучше всего посмотреть на файл и установить соответствующий тип контента:
switch ( fileExtension )
{
case "pdf": Response.ContentType = "application/pdf"; break;
case "swf": Response.ContentType = "application/x-shockwave-flash"; break;
case "gif": Response.ContentType = "image/gif"; break;
case "jpeg": Response.ContentType = "image/jpg"; break;
case "jpg": Response.ContentType = "image/jpg"; break;
case "png": Response.ContentType = "image/png"; break;
case "mp4": Response.ContentType = "video/mp4"; break;
case "mpeg": Response.ContentType = "video/mpeg"; break;
case "mov": Response.ContentType = "video/quicktime"; break;
case "wmv":
case "avi": Response.ContentType = "video/x-ms-wmv"; break;
//and so on
default: Response.ContentType = "application/octet-stream"; break;
}
Это часть решения, которое я использую в локальной сети. Некоторые переменные вам придется собирать самостоятельно, когда я извлекаю их из базы данных, но вы можете взять их откуда-то еще.
Единственное дополнительное, но у меня есть функция getMimeType, которая подключается к базе данных и возвращает правильный тип шахты на основе расширения файла. По умолчанию используется application / octet-stream, если ничего не найдено.
// Clear the response buffer incase there is anything already in it.
Response.Clear();
Response.Buffer = true;
// Read the original file from disk
FileStream myFileStream = new FileStream(sPath, FileMode.Open);
long FileSize = myFileStream.Length;
byte[] Buffer = new byte[(int)FileSize];
myFileStream.Read(Buffer, 0, (int)FileSize);
myFileStream.Close();
// Tell the browse stuff about the file
Response.AddHeader("Content-Length", FileSize.ToString());
Response.AddHeader("Content-Disposition", "inline; filename=" + sFilename.Replace(" ","_"));
Response.ContentType = getMimeType(sExtention, oConnection);
// Send the data to the browser
Response.BinaryWrite(Buffer);
Response.End();
Да, Кит некрасиво, но верно. В итоге я поместил типы MIME, которые мы будем использовать, в базу данных, а затем извлек их, когда я публиковал файл. Я до сих пор не могу поверить, что не существует никакого авторского списка типов или что нет никакого упоминания о том, что доступно в MSDN.
Я нашел этот сайт, который предоставил некоторую помощь.
Начиная с .Net 4.5 можно использовать
MimeMapping.GetMimeMapping
Он возвращает отображение MIME для указанного имени файла.
https://docs.microsoft.com/en-us/dotnet/api/system.web.mimemapping.getmimemapping