c# - Affichage du contenu publicitaire de Respose.WriteFile () / Response.ContentType

Translate

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 à une requête Web.

Cela permettrait aux gens d'accéder à une URL pour le typehttp://www.foo.com?Image=test.jpget afficher l'image dans leur navigateur. Donc, comme vous le savez peut-être, cela tourne autour de l'utilisation de Response.ContentType.

En utilisant

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

Je suis capable d'afficher des images de type gif / jpeg / png (tout ce que j'ai testé jusqu'à présent), un peu essayer d'afficher des fichiers .swf ou .ico me donne une jolie petite erreur.

en utilisant

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

Je peux faire lire des fichiers flash, mais les images sont alors en désordre.

Alors, comment puis-jefacilementchoisir le type de contenu?

This question and all comments follow the "Attribution Required."

Toutes les réponses

Translate

C'est moche, mais le meilleur moyen est de regarder le fichier et de définir le type de contenu comme il convient:

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; 
}
La source
Translate

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

Le seul extra mais je suis dedans est une fonction appeléegetMimeTypequi se connecte à la base de données et récupère le type de mine correct en fonction de l'extension de fichier. Cette valeur par défaut est 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();
La source
Translate

OuaipKeithmoche mais vrai. J'ai fini par placer les types MIME que nous utiliserions dans une base de données, puis je les ai retirés lorsque je publiais un fichier. Je n'arrive toujours pas à croire qu'il n'y ait pas de liste automatique de types là-bas ou qu'il n'y ait aucune mention de ce qui est disponible dans MSDN.

j'ai trouvécesite qui a fourni une aide.

La source
Translate

Depuis .Net 4.5, on peut utiliser

MimeMapping.GetMimeMapping

Il renvoie le mappage MIME pour le nom de fichier spécifié.

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

La source