Вопрос

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top