ContentType не работает, mime = application / octet-stream
-
06-07-2019 - |
Вопрос
В C # я делаю
context.Response.ContentType = "image/png";
context.RewritePath(sz);
context.Response.ContentType = "image/png";
Кажется, он перенаправляет путь, как я вижу, вижу изображения на моих страницах. Однако в Firefox, когда я щелкаю правой кнопкой мыши и выбираю " просмотреть изображение " я получаю загрузку. Используя этот код на C ++, я вижу, что mime - это 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;
}
Мой вопрос: как мне установить MIME на правильный тип? Выше я жестко закодировал его в png, который не работает. Однако я, скорее, не жёстко кодирую любую пантомиму, и она работает. Я смог перенаправить XML-файл в somefile.aspx, чтобы страница установила тип содержимого и сгенерировала XML. Однако перезапись на путь к изображению, кажется, позволяет изображению работать, я просто не получаю правильный тип.
Как мне исправить тип контента / пантомимы? Как план B, я перепишу в файл aspx. Какой лучший способ отправить изображение? Могу ли я сделать что-то вроде context.Response.OutputStream = stream (" имя файла ");
Решение
Когда вы используете RewritePath
, все, что вы написали в голову, отбрасывается. Все, что обрабатывает новый путь, обеспечивает заголовок.
Если вы хотите указать тип содержимого, вы не можете использовать RewritePath
. Вместо этого вы можете использовать Response.BinaryWrite
или Response.WriteFile
для вывода данных файла в поток ответов после установки заголовка.
Другие советы
Ознакомьтесь с созданием изображения PNG с помощью веб-службы C # HttpHandler р>
Это должен привести пример сброса PNG в ответ.
application / octet-stream
сообщит вашему браузеру, что файл является двоичным, и ваш браузер загрузит его.
Это работало для меня в прошлом (в HttpHandler
, единолично отвечающем за обслуживание файлов, отсюда и чистые вызовы):
<код> код>
Response.Clear();
Response.ClearHeaders();
Response.ContentType = "image/png";
Response.AddHeader("Content-Type", image/png");
Если вы хотите загрузить файл, вы также можете добавить:
<код> код>
Response.AddHeader("Content-Disposition", "attachment; filename=myimage.png");
предложить браузеру имя файла для сохранения как.