Question

En C #, je le fais

            context.Response.ContentType = "image/png";
            context.RewritePath(sz);
            context.Response.ContentType = "image/png";

Il semble rediriger le chemin car je peux voir les images sur mes pages. Cependant, dans Firefox lorsque je clique avec le bouton droit de la souris et sélectionnez "Afficher l'image". Je reçois un téléchargement. En utilisant ce code c ++, je peux voir le mime être application / octet-stream

#include <curl/curl.h> 
#include <ios>
#include <iostream>
#include <string>
#pragma comment(lib, "curllib")
using namespace std;
size_t function( void *ptr, size_t size, size_t nmemb, void *stream)
{
    cout << (char*)ptr;
    return size*nmemb;
}
size_t function2( void *ptr, size_t size, size_t nmemb, void *stream)
{
    return size*nmemb;
}
int main()
{
    CURL *c = curl_easy_init();
    curl_easy_setopt(c, CURLOPT_HEADERFUNCTION, function);
    curl_easy_setopt(c, CURLOPT_WRITEHEADER , 1);
    curl_easy_setopt(c, CURLOPT_WRITEFUNCTION, function2);
    curl_easy_setopt(c, CURLOPT_WRITEDATA, 0);
    curl_easy_setopt(c, CURLOPT_URL, "http://localhost:3288/s/main/4/AAA.png");
    curl_easy_perform(c);
    curl_easy_cleanup(c);
    return 0;
}

Ma question est de savoir comment définir le type correct pour le mime. Ci-dessus, je le code au format png qui ne fonctionne pas. Cependant, je préfère ne pas coder aucun mime et le faire fonctionner. J'ai pu rediriger un fichier XML vers somefile.aspx et demander à la page de définir le type de contenu et de générer le code XML. Cependant, la réécriture sur le chemin de l’image semble laisser l’image fonctionner, je n’obtiens tout simplement pas le type correct.

Comment corriger le type de contenu / mime? En tant que plan B, je vais réécrire dans un fichier aspx. Quel est le meilleur moyen d'envoyer une image? Pourrais-je faire quelque chose comme context.Response.OutputStream = stream (" nomfichier "); ?

Était-ce utile?

La solution

Lorsque vous utilisez RewritePath , tout ce que vous avez écrit dans la tête est ignoré. Ce qui gère le nouveau chemin fournit l’en-tête.

Si vous souhaitez spécifier le type de contenu, vous ne pouvez pas utiliser RewritePath . À la place, vous pouvez utiliser Response.BinaryWrite ou Response.WriteFile pour exporter les données du fichier dans le flux de réponses après avoir défini l'en-tête.

Autres conseils

Découvrez: Créer une image PNG avec C # HttpHandler webservice

Cela devrait vous donner un exemple de dumping d'un fichier PNG dans la réponse.

application / octet-stream indiquera à votre navigateur que le fichier est binaire et votre navigateur le téléchargera ensuite.

Cela a fonctionné pour moi dans le passé (dans un HttpHandler uniquement responsable du traitement des fichiers, d'où les appels clairs):

Response.Clear();
Response.ClearHeaders();
Response.ContentType = "image/png";
Response.AddHeader("Content-Type", image/png");

Si vous souhaitez télécharger le fichier, vous pouvez également ajouter:

Response.AddHeader("Content-Disposition", "attachment; filename=myimage.png");

pour suggérer au navigateur un nom de fichier à enregistrer sous.

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