ContentType non funziona, mime = application / octet-stream
-
06-07-2019 - |
Domanda
In C # lo sto facendo
context.Response.ContentType = "image/png";
context.RewritePath(sz);
context.Response.ContentType = "image/png";
Sembra reindirizzare il percorso come posso vedere le immagini sulle mie pagine. Tuttavia in Firefox quando faccio clic con il tasto destro del mouse e seleziono " visualizza immagine " ottengo un download. Usando questo codice c ++ posso vedere il mime come 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;
}
La mia domanda è: come posso impostare il mime sul tipo corretto? Sopra ho hardcode per png che non funziona. Tuttavia preferisco non codificare alcun mimo e farlo funzionare. Sono stato in grado di reindirizzare un file XML su somefile.aspx e fare in modo che la pagina impostasse il tipo di contenuto e generasse l'XML. Tuttavia, riscrivere il percorso dell'immagine sembra far funzionare l'immagine ma non riesco a ottenere il tipo corretto.
Come posso correggere il tipo di contenuto / mime? Come piano B riscriverò in un file aspx. Qual è il modo migliore per inviare un'immagine? Potrei fare qualcosa di simile a context.Response.OutputStream = stream (" nomefile "); ?
Soluzione
Quando usi RewritePath
, tutto ciò che hai scritto in testa viene scartato. Qualunque cosa stia gestendo il nuovo percorso, fornisce l'intestazione.
Se si desidera specificare il tipo di contenuto, non è possibile utilizzare RewritePath
. Invece puoi usare Response.BinaryWrite
o Response.WriteFile
per generare i dati del file nel flusso di risposta dopo aver impostato l'intestazione.
Altri suggerimenti
Dai un'occhiata: Crea immagine PNG con servizio Web C # HttpHandler
Dovrebbe darti un esempio di come scaricare un PNG nella risposta.
application / octet-stream
dirà al tuo browser che il file è binario e il tuo browser lo scaricherà.
Questo ha funzionato per me in passato (in un HttpHandler
l'unico responsabile della pubblicazione dei file, quindi delle chiamate chiare):
Response.Clear();
Response.ClearHeaders();
Response.ContentType = "image/png";
Response.AddHeader("Content-Type", image/png");
Se vuoi scaricare il file, puoi anche aggiungere:
Response.AddHeader("Content-Disposition", "attachment; filename=myimage.png");
per suggerire un nome file al browser da salvare come.