ContentType не работает, mime = application / octet-stream - PullRequest
0 голосов
/ 22 июня 2009

В 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 ("filename");

Ответы [ 3 ]

2 голосов
/ 22 июня 2009

Когда вы используете RewritePath, все, что вы написали в голову, отбрасывается. Все, что обрабатывает новый путь, обеспечивает заголовок.

Если вы хотите указать тип контента, вы не можете использовать RewritePath. Вместо этого вы можете использовать Response.BinaryWrite или Response.WriteFile для вывода данных файла в поток ответов после установки заголовка.

0 голосов
/ 22 июня 2009

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");

предложить браузеру имя файла для сохранения как.

0 голосов
/ 22 июня 2009

Проверить: Создать PNG-изображение с C # HttpHandler webservice

Он должен дать вам пример сброса PNG в ответ.

...