如何通过ISAPI dll发送大文件?

时间:2018-01-26 12:34:24

标签: delphi iis isapi

我有一个isapi DLL(在Delphi中制作),必须返回大文件(视频文件)。所有这些视频文件都连接在一个物理文件(数据文件)中。因此,例如,如果用户请求文件#123,那么isapi dll将需要返回位于偏移$ xx的数据文件中的字节到偏移$ yy。

实际上我的问题是它看起来像我在内存中加载了从偏移$ xx到偏移$ yy的所有字节,当我通过EXTENSION_CONTROL_BLOCK WriteClient发送它们

他们是一种不在内存中加载所有字节的方法,并在用户客户端请求时以递增方式返回它吗?

实际上这是我的代码:

var Buffer: array[0..8191] of Byte;
AStream.Position := StartOffset;
while AStream.Position < EndOffset do begin
  BytesToSend := AFileStream.Read(Buffer, SizeOf(Buffer));
  MyEXTENSION_CONTROL_BLOCK.WriteClient(ECB.ConnID, @Buffer, DWORD(BytesToSend)
end

1 个答案:

答案 0 :(得分:0)

请查看this,看看它是否适用于您的情况。如果确实如此,可以在每个回复开始时调用一次来帮助您:

ecb.ServerSupportFunction(ecb.ConnID,HSE_REQ_SET_FLUSH_FLAG,pointer(true),nil,nil);

(其中ecb是指向扩展控制块的指针)