下面是我在网上找到的二种方法,可全部不能用。小于48K时没有问题,
只要大于48K就全把服务器CPU时间全部吃掉,而且一直到超时为止,大家帮
忙看一下那里出错了,我是水平太差,实在找不出错在那儿了。先行谢过!第一种方法:
var
  Strm:TMemoryStream;
  Size:Integer;
  Buffer:Array [0..8192-1] of Byte;
  TotalBytes:Integer;
begin
  try
    Strm:=TMemoryStream.Create;
    Strm.Write(PChar(Request.Content)^,Length(Request.Content));
    TotalBytes:=Request.ContentLength - Length(Request.Content);
    while TotalBytes>0 do
      begin
        Size:=Request.ReadClient(Buffer[0],High(Buffer)+1);
        if Size<=0 then break;
        Strm.Write(Buffer[0],Size);
        TotalBytes:=TotalBytes-Size;
      end;
    Response.Content := '<H3>文件上传成功。</H3>';
  finally
    Strm.Free;
  end;
  Handled:=true;
end;第二种方法:
var
  TotalBytes      : DWORD;
  AvailableBytes  : DWORD;
  ExtraBytes      : DWORD;
  ActualBytesRead : DWORD;
  ExtraBytesRead  : DWORD;
  pBuffer         : PChar;
  extBuffer       : PChar;
  Strm            : TMemoryStream;
begin
  try
    TotalBytes := Request.ContentLength;
    GetMem(pBuffer, TotalBytes);
    pBuffer^ := Chr(0);
    Strm := TMemoryStream.Create;
    try
      AvailableBytes := Length(Request.Content);
      pBuffer := PChar(Request.Content);
      Strm.Write(pBuffer^,AvailableBytes);
      if TotalBytes > AvailableBytes then
      begin
        ExtraBytes := TotalBytes - AvailableBytes;
        GetMem(extBuffer, ExtraBytes);
        extBuffer^ := Chr(0);
        ExtraBytesRead := 0;
        repeat
          ActualBytesRead := Request.ReadClient(extBuffer^,ExtraBytes - ExtraBytesRead);
          Strm.Write(extBuffer^,ActualBytesRead);
          Inc(ExtraBytesRead, ActualBytesRead);
        until (ExtraBytes - ExtraBytesRead )= 0;
      end;
      Response.Content := '<H3>文件上传成功。</H3>';
    finally
      Strm.Free;
    end;
  except
   on E : Exception do
     Response.Content := '<H3>出错!</H3><BR>' + E.Message;
  end;
end;

解决方案 »

  1.   

    是request 不能提交那么大的数据 你可以去下一个上传组件 就没有限制了
      

  2.   

    网上的组件是基于ASP的,再说了我是要写到自己ISAPI里啊,求助!!
      

  3.   

    上边的就是文件上传的源码啊,余下的就是拆分数据了,我想可能
    是BUFFER的问题,可我实在看不出来了:(,求助!!!!!
      

  4.   


    架设iis用TIdMultiPartFormDataStream+lyfupload.dll上传吧
        ss='';
        mpfs:=TIdMultiPartFormDataStream.create;
        mpfs.AddFile('file1',getSystemDir+SaveToFile,ss);
        showmessage(IdHTTP1.Post(SaveTo,mpfs));
    另外注意你的iis的设置
      

  5.   

    用indy应该就不会有这样的限制了
    你上网查查
    http://www.playicq.com
    这样的例子应该很多的
      

  6.   

    真的不能解决吗?还是Request.ReadClient有什么问题?
    等待中。
      

  7.   

    你可以把文件分流分成<4K的,最后合并