Pregunta

En C # estoy haciendo

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

Parece redirigir la ruta, ya que puedo ver ver imágenes en mis páginas. Sin embargo, en Firefox cuando hago clic derecho y selecciono "ver imagen" Me sale una descarga. Usando este código c ++ puedo ver que el mime es 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;
}

Mi pregunta es ¿cómo configuro el mime en el tipo correcto? Arriba, lo codifico a png, lo que no funciona. Sin embargo, prefiero no codificar ningún mimo y hacer que funcione. Pude redirigir un archivo XML a somefile.aspx y hacer que la página establezca el tipo de contenido y genere el XML. Sin embargo, reescribir en la ruta de la imagen parece permitir que la imagen funcione, simplemente no obtengo el tipo correcto.

¿Cómo corrijo el tipo de contenido / mime? Como plan B, volveré a escribir en un archivo aspx. ¿Cuál es la mejor manera de enviar una imagen? ¿Podría hacer algo como context.Response.OutputStream = stream (" filename "); ?

¿Fue útil?

Solución

Cuando usa RewritePath , lo que haya escrito en la cabeza se descarta. Lo que sea que esté manejando la nueva ruta es proporcionar el encabezado.

Si desea especificar el tipo de contenido, no puede usar RewritePath . En su lugar, puede usar Response.BinaryWrite o Response.WriteFile para enviar los datos del archivo a la secuencia de respuesta después de configurar el encabezado.

Otros consejos

Echa un vistazo: Cree una imagen PNG con el servicio web C # HttpHandler

Debería darle un ejemplo de volcar un PNG en la respuesta.

application / octet-stream le dirá a su navegador que el archivo es binario y luego su navegador lo descargará.

Esto me ha funcionado en el pasado (en un HttpHandler exclusivamente responsable de servir archivos, de ahí las llamadas claras):

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

Si desea descargar el archivo, también puede agregar:

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

para sugerir un nombre de archivo al navegador para guardar como.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top