【问题标题】:How to send large file through ISAPI dll?如何通过 ISAPI dll 发送大文件?
【发布时间】:2018-01-27 06:13:59
【问题描述】:

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

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

他们是不是一种不将所有字节加载到内存中并在用户客户端请求时增量返回的方法?

其实这是我的代码:

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

【问题讨论】:

标签: delphi iis isapi


【解决方案1】:

请查看this,看看它是否适用于您的情况。如果是这样,您可以通过在每个响应开始时调用一次来帮助您:

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

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

【讨论】:

  • 如果你想看一个例子,在project of mine我在HSE_REQ_SEND_RESPONSE_HEADER_EX之前调用它
猜你喜欢
  • 1970-01-01
  • 2020-01-07
  • 2021-07-09
  • 2015-10-04
  • 2015-06-23
  • 2016-08-01
  • 1970-01-01
  • 2012-07-12
  • 1970-01-01
相关资源
最近更新 更多