Afficher le contenu de l'annonce de Respose.WriteFile()/ Réponse.ContentType

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

  •  08-06-2019
  •  | 
  •  

Question

Comment pourrait-on afficher tout ajouter du contenu à partir d'une "dynamique" page aspx?Je travaille actuellement sur l'utilisation du Système.Web.HttpResponse "De La Page.Réponse" à l'écriture d'un fichier qui est stocké sur un serveur web pour une requête web.

Cela permettrait aux gens de frapper une url du type http://www.foo.com?Image=test.jpg et avoir l'affichage de l'image dans leur navigateur.Donc, comme vous le savez peut-être cette tourne autour de l'utilisation de la Réponse.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é à ce jour), bits de l'affichage .swf ou .ico des fichiers me donne une belle petite erreur.

à l'aide de

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

Je peux obtenir des fichiers flash à jouer, mais les images sont foiré.

Alors, comment puis-je facilement choisissez le contenttype?

Était-ce utile?

La solution

C'est moche, 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; 
}

Autres conseils

Cette est une partie d'une solution que j'utilise sur un intranet local.Certaines de ces variables, vous devrez collecter vous-même comme je l'ai tirer à partir d'une base de données, mais vous pouvez les tirer de quelque part d'autre.

Le seul, mais j'ai à il y a une fonction appelée getMimeType qui se connecte à la base de données et tire en arrière la bonne mine type basée sur l'extension de fichier.La valeur par défaut de l'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();

Yup Keith laid mais c'est vrai.J'ai fini par placer les types MIME que nous allions utiliser dans une base de données, puis de les sortir quand j'ai été la publication d'un fichier.Je ne peux toujours pas croire qu'il n'y a pas de autoritive liste de types là-bas ou qu'il n'y est fait aucune mention de ce qui est disponible dans MSDN.

J'ai trouvé cette site qui a fourni de l'aide.

Depuis .Net 4.5, on peut utiliser

MimeMapping.GetMimeMapping

Il retourne le type MIME pour le nom de fichier spécifié.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top