`
cloudtech
  • 浏览: 4604178 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

服务响应文件SRF直接向浏览器传图片流的代码片段

 
阅读更多

题目:服务响应文件SRF直接向客户端浏览器传图片流的代码片段

cheungmine


问题:如何从Web服务端把图片数据直接写到流里,展现在客户端浏览器中

为什么要这样做:效率、安全。不生成临时文件。完全内存操作。

我使用VS2005 创建ATL Server项目,合并ISAPI,其他如常。项目名称:RefreshImg。自动创建同名的虚拟目录,并且自动部署。

1)改写RefreshImg.h文件的下面这段代码:

// 下面是一个有关如何将替换标记用于模具(Stencil)处理器的示例
HTTP_CODE OnHello(void)
{
//m_HttpResponse << "Hello World!";

char buf[4096];
size_t cbRead;
DWORD dwWritten;

m_HttpResponse.ClearContent();
m_HttpResponse.SetContentType("image/jpeg");

// 下面的图片文件必须存在
FILE *fp = fopen("C://Inetpub//wwwroot//RefreshImg//obm_skq.jpg", "rb");

while((cbRead = fread(buf, 1, 4096, fp))>0){
if (S_OK != m_HttpResponse.WriteStream(buf, cbRead, &dwWritten) || cbRead != dwWritten){
fclose(fp);
return HTTP_FAIL;
}
}

return HTTP_SUCCESS;
}

2)改写RefreshImg.srf:

<html>
{{handler RefreshImg.dll/Default}}
<head>
</head>
<body>
<img src="{{Hello}}" />
</body>
</html>

3)重新生成全部解决方案,然后用IE或FF打开

http://localhost/RefreshImg/RefreshImg.srf

就可以看到图片了。

也可以自己写一个新的Refresh.htm网页,如下:

<html>
<head>
<title>cheungmine</title>
</head>
<body>
<img src="RefreshImg.srf" />
</body>
</html>

把 Refresh.htm 放到和 RefreshImg.srf 同一个目录下面。

这时候浏览Refresh.htm,也可以看到图片:

>>

.NET仿照此做。但本文与.NET无关。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics