Visualizzare il contenuto dell'annuncio da Respose.WriteFile()/ Risposta.ContentType

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

  •  08-06-2019
  •  | 
  •  

Domanda

Come sarebbe un display aggiungere qualsiasi contenuto da una "dinamica" pagina aspx?Attualmente sto lavorando su come usare il Sistema.Web.HttpResponse "Pagina.Risposta" per la scrittura di un file che è memorizzato su un server web a una richiesta web.

Questo consentirebbe di colpire un url del tipo http://www.foo.com?Image=test.jpg e l'immagine di visualizzazione nel browser.Quindi, come si può sapere ciò che ruota attorno all'uso di Risposta.ContentType.

Utilizzando

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

Io sono in grado di visualizzare immagini di tipo gif/jpeg/png (tutto quello che ho provato finora), un po ' cercando di visualizzare .swf o .ico mi dà un bel po ' di errore.

utilizzando

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

Posso ottenere i file flash da giocare, ma le immagini sono incasinato.

Allora, come faccio facilmente scegli il contenttype?

È stato utile?

Soluzione

Questo è brutto, ma il modo migliore è quello di guardare il file e impostare il tipo di contenuto, come appropriato:

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

Altri suggerimenti

Questo è parte di una soluzione io la uso su una rete intranet locale.Alcune delle variabili che si devono raccogliere voi stessi come li trascino da un database, ma si può tirare da qualche altra parte.

L'unico extra, ma che ho avuto c'è una funzione chiamata getMimeType che si collega al database e tira indietro la giusta miniera di tipo base all'estensione del file.Questo di default application/octet-stream se non viene trovato.

// 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 brutto ma vero.Ho finito di posizionare i tipi MIME che vorremmo utilizzare in un database e poi tirarli fuori quando avevo la pubblicazione di un file.Ancora non riesco a credere che non c'è autoritive elenco dei tipi là fuori o che non vi è alcuna menzione di ciò che è disponibile in MSDN.

Ho trovato questo sito che ha fornito un po di aiuto.

Allora .Net 4.5 si può usare

MimeMapping.GetMimeMapping

Restituisce il mapping MIME per il nome di file specificato.

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top