Vă mulțumim pentru susținere

Afișarea conținutului publicitar din Respose.WriteFile () / Response.ContentType

Cum ar fi afișat un conținut adăugat dintr-o pagină aspx "dinamică"? În prezent lucrez la utilizarea System.Web.HttpResponse "Page.Response" pentru a scrie un fișier care este stocat pe un server web la o solicitare web.

Acest lucru ar permite oamenilor să lovească o adresă URL la tipul http://www.foo.com?Image= test.jpg și să afișeze imaginea în browser. Așa cum știți, acest lucru se învârte în jurul utilizării răspunsului.ContentType.

Prin utilizarea

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

Sunt capabil să afișeze imagini de tip gif / jpeg / png (tot ce am testat până acum), bit încercând să afișez fișierele .swf sau .ico îmi dă o eroare mică.

utilizând

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

Pot să obțin fișiere flash pentru a juca, dar apoi imaginile sunt deranjate.

Deci, cum pot alege cu ușurință tipul de conținut?

0
adăugat editat

4 răspunsuri

Keith urât, dar adevărat. Am terminat plasarea tipurilor MIME pe care le-am folosi într-o bază de date și apoi le-am tras atunci când am publicat un fișier. Încă nu pot să cred că nu există o listă autoritivă de tipuri acolo sau că nu există nicio mențiune despre ceea ce este disponibil în MSDN.

Am găsit acest site care a oferit ajutor.

0
adăugat

Aceasta face parte dintr-o soluție pe care o folosesc pe un intranet local. Unele dintre variabilele pe care le va trebui să le colectați pe măsură ce le trag dintr-o bază de date, dar le puteți trage din altă parte.

Singura extra, dar am o functie numita getMimeType care se conecteaza la baza de date si trage inapoi tipul corect de mine pe baza extensiei de fisier. Această valoare implicită este aplicația / fluxul octet dacă nu se găsește nici una.

// 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();
0
adăugat

Acest lucru este urât, dar cel mai bun mod este să priviți fișierul și să setați tipul de conținut după cum este necesar:

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; 
}
0
adăugat

Din moment ce .Net 4.5 se poate folosi

MimeMapping.GetMimeMapping

Aceasta returnează maparea MIME pentru numele de fișier specificat.

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

0
adăugat