Mostrar contenido publicitario de Respose.WriteFile()/ Response.ContentType

StackOverflow https://stackoverflow.com/questions/3234

  •  08-06-2019
  •  | 
  •  

Pregunta

¿Cómo se mostraría el contenido agregado de una página aspx "dinámica"?Actualmente estoy trabajando en el uso de System.Web.HttpResponse "Page.Response" para escribir un archivo almacenado en un servidor web para una solicitud web.

Esto permitiría a las personas acceder a una URL del tipo http://www.foo.com?Imagen=test.jpg y hacer que la imagen se muestre en su navegador.Como sabrás, esto gira en torno al uso de Response.ContentType.

Mediante el uso

Response.ContentType = "application/octet-stream";

Puedo mostrar imágenes de tipo gif/jpeg/png (todo lo que he probado hasta ahora), pero intentar mostrar archivos .swf o .ico me da un pequeño error.

usando

Response.ContentType = "application/x-shockwave-flash";

Puedo reproducir archivos flash, pero luego las imágenes se confunden.

Entonces, ¿cómo puedo fácilmente elegir el tipo de contenido?

¿Fue útil?

Solución

Esto es feo, pero la mejor manera es mirar el archivo y configurar el tipo de contenido según corresponda:

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

Otros consejos

Esto es parte de una solución que uso en una intranet local.Algunas de las variables tendrás que recopilarlas tú mismo mientras las extraigo de una base de datos, pero puedes extraerlas de otro lugar.

El único extra que tengo ahí es una función llamada obtener tipo Mime que se conecta a la base de datos y recupera el tipo de mina correcto según la extensión del archivo.El valor predeterminado es application/octet-stream si no se encuentra ninguno.

// 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();

keith feo pero cierto.Terminé colocando los tipos MIME que usaríamos en una base de datos y luego los saqué cuando estaba publicando un archivo.Todavía no puedo creer que no exista una lista autorizada de tipos o que no se mencione lo que está disponible en MSDN.

encontré este sitio que proporcionó algo de ayuda.

Desde .Net 4.5 se puede usar

MimeMapping.GetMimeMapping

Devuelve la asignación MIME para el nombre de archivo especificado.

https://msdn.microsoft.com/en-us/library/system.web.mimemapping.getmimemapping(v=vs.110).aspx

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top