Exibindo o conteúdo do anúncio Respose.WriteFile()/ Resposta.ContentType

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

  •  08-06-2019
  •  | 
  •  

Pergunta

Como seria um vídeo qualquer adicione o conteúdo de uma "dinâmica" página aspx?Atualmente eu estou trabalhando em utilizar o Sistema.Da Web.HttpResponse "Página.Resposta" para gravar um arquivo que é armazenado em um servidor web para uma solicitação da web.

Isso permitiria que pessoas de bater um url para o tipo de http://www.foo.com?Image=test.jpg e ter a exibição da imagem em seu navegador.Então, como você pode saber isso gira em torno da utilização de Resposta.ContentType.

Usando

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

Eu sou capaz de exibir imagens do tipo gif/jpeg/png (todos os que eu testei até agora), pouco tentando exibir .swf ou .ico arquivos dá-me um pouco agradável de erro.

usando

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

Eu posso obter arquivos de flash para jogar, mas, em seguida, as imagens estão erradas.

Então, como eu facilmente escolha o tipo de conteúdo?

Foi útil?

Solução

Isso é feio, mas a melhor maneira é olhar o arquivo e definir o tipo de conteúdo, como apropriado:

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

Outras dicas

Esta é parte de uma solução que eu uso em uma intranet local.Algumas das variáveis que você terá que recolher a si mesmo como eu trazê-los a partir de um banco de dados, mas você pode trazê-los de lugar.

O único extra, mas eu tenho em existe uma função chamada getMimeType que se conecta ao banco de dados e puxa de volta correta de minas com base no tipo de arquivo a extensão de.Este padrão application/octet-stream, se nenhum for encontrado.

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

Yup Keith feio, mas é verdade.Eu acabei colocando os tipos MIME que vamos usar em um banco de dados e, em seguida, puxe-os para fora quando eu estava publicando um arquivo.Eu ainda não posso acreditar que não há autoritive lista de tipos de existir ou que não há nenhuma menção de que está disponível no MSDN.

Eu encontrei este site fornecidas alguma ajuda.

Desde .Net 4.5 pode-se usar

MimeMapping.GetMimeMapping

Ele retorna o mapeamento de MIME para o nome de arquivo especificado.

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top