Отображение рекламного контента из Respose.WriteFile () / Response.ContentType

Как отобразить любой добавленный контент с «динамической» страницы 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";

Я могу запустить флеш-файлы, но тогда изображения будут перепутаны.

Итак, как мне легко выбрать тип контента?

Ответов (4)

Решение

Это некрасиво, но лучший способ - посмотреть файл и установить соответствующий тип содержимого:

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; 
}

Поскольку .Net 4.5 можно использовать

MimeMapping.GetMimeMapping

Он возвращает отображение MIME для указанного имени файла.

https://docs.microsoft.com/en-us/dotnet/api/system.web.mimemapping.getmimemapping

Да, Кейт, некрасиво, но это правда. В итоге я поместил типы MIME, которые мы использовали бы, в базу данных, а затем вытащил их, когда публиковал файл. Я до сих пор не могу поверить в то, что не существует авторитетного списка типов или нет упоминания о том, что доступно в MSDN.

Я нашел этот сайт, который оказал некоторую помощь.

Это часть решения, которое я использую в локальной интрасети. Некоторые переменные вам придется собрать самостоятельно, пока я извлекаю их из базы данных, но вы можете получить их откуда-то еще.

Единственное, что у меня есть, это функция 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();