在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。然而,重写到图像路径似乎让图像工作,我只是没有得到正确的类型。
如何更正内容/ mime类型?作为计划B,我将重写为aspx文件。什么是发送图像的最佳方式?我可以做像context.Response.OutputStream = stream(“filename”); ?
答案 0 :(得分:2)
当您使用RewritePath
时,无论您写入头部的内容都将被丢弃。处理新路径的是提供标题。
如果要指定内容类型,则无法使用RewritePath
。相反,您可以在设置标题后使用Response.BinaryWrite
或Response.WriteFile
将文件数据输出到响应流。
答案 1 :(得分:0)
退房:Create PNG image with C# HttpHandler webservice
它应该给你一个将PNG转储到响应中的例子。
答案 2 :(得分:0)
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");
向浏览器建议一个文件名以保存为。