ContentType não funciona, mime = application / octet-stream
-
06-07-2019 - |
Pergunta
Em C # eu estou fazendo
context.Response.ContentType = "image/png";
context.RewritePath(sz);
context.Response.ContentType = "image/png";
Parece para redirecionar o caminho como eu posso ver as imagens ver em minhas páginas. No entanto no Firefox quando eu clique direito e selecione "imagem vista" i obter um download. Usando este ++ código c i pode ver o mime sendo 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;
}
A minha pergunta é como faço para definir o mime para o tipo correto? Acima i codificá-lo para png que não funciona. No entanto eu prefiro não codificar qualquer mime e tê-lo trabalhar. Eu era capaz de redirecionar um arquivo XML para somefile.aspx e têm que a página definir o tipo de conteúdo e gerar o XML. No entanto reescrever para o caminho da imagem parece deixar o trabalho imagem eu apenas não obter o tipo correto.
Como faço para corrigir o tipo de conteúdo / MIME? Como plano B eu vou reescrever para um arquivo aspx. Qual é a melhor maneira de enviar uma imagem? eu poderia fazer algo como context.Response.OutputStream = fluxo ( "filename"); ?
Solução
Quando você usa RewritePath
, o que você tem escrito para a cabeça é descartado. O que quer que está a lidar com o novo caminho está fornecendo o cabeçalho.
Se você quiser especificar o tipo de conteúdo, você não pode usar RewritePath
. Em vez disso você pode usar Response.BinaryWrite
ou Response.WriteFile
para a saída dos dados de arquivo para o fluxo de resposta depois de definir o cabeçalho.
Outras dicas
Confira: Criar uma imagem PNG com C # HttpHandler webservice
Deve dar-lhe um exemplo de dumping a PNG para a resposta.
application/octet-stream
vai dizer ao seu navegador que o arquivo é binário e seu navegador irá então baixá-lo.
Este tem trabalhado para mim no passado (em um HttpHandler
o único responsável por servir arquivos, portanto, as chamadas nítidas):
Response.Clear();
Response.ClearHeaders();
Response.ContentType = "image/png";
Response.AddHeader("Content-Type", image/png");
Se você deseja fazer o download do arquivo, você também pode adicionar:
Response.AddHeader("Content-Disposition", "attachment; filename=myimage.png");
para sugerir um nome de arquivo para o navegador para salvar como.