2008-08-06 9 views
12

Comment afficher un contenu ajouté à partir d'une page ASPX "dynamique"? Actuellement, je travaille sur l'utilisation de System.Web.HttpResponse "Page.Response" pour écrire un fichier stocké sur un serveur Web dans une requête Web.Affichage du contenu de l'annonce à partir de Respose.WriteFile()/Response.ContentType

Cela permettrait aux gens de frapper une URL au type http://www.foo.com?Image=test.jpg et afficher l'image dans leur navigateur. Donc, comme vous le savez, cela tourne autour de l'utilisation de Response.ContentType.

En utilisant

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

Je suis en mesure d'afficher des images de type GIF/JPEG/PNG (je l'ai testé à ce jour), le bit essayant d'afficher .swf ou .ico me donne un joli petit Erreur.

utilisant

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

Je peux obtenir des fichiers flash pour jouer, mais les images sont embrouillés.

Alors, comment puis-je facilement facilement choisir le type de contenu?

Répondre

8

Ceci est laid, mais la meilleure façon est de regarder le fichier et définir le type de contenu, selon le cas:

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

Cela fait partie d'une solution que j'utilise sur un intranet local. Certaines des variables que vous devrez collecter vous-même pendant que je les tire d'une base de données mais vous pouvez les tirer d'ailleurs.

Le seul supplément, mais j'ai là-dedans est une fonction appelée getMimeType qui se connecte à la base de données et retire le type de mine correct en fonction de l'extension de fichier. Ceci est par défaut application/octet-stream si aucun n'est trouvé.

// 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

Eh oui Keith laid, mais vrai. J'ai fini par placer les types MIME que nous utiliserions dans une base de données, puis les retirer lorsque je publiais un fichier. Je ne peux toujours pas croire qu'il n'y a pas de liste autoritive de types là-bas ou qu'il n'y a aucune mention de ce qui est disponible dans MSDN. J'ai trouvé this site qui a fourni de l'aide.

Questions connexes