首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

三层上传文件时,第二次上传会报内存异常

2013-11-18 
三层上传文件时,第二次上传会报内存错误三层上传文件时,第一次上传正常,第二次上传客户端会报内存错误,第

三层上传文件时,第二次上传会报内存错误
三层上传文件时,第一次上传正常,第二次上传客户端会报内存错误,第三次上传又正常,请帮我看看是什么原因?

服务端代码:


function TServerMethods1.PutFile(AfileName,SaveFolder: string; Stream: TStream): Boolean;
const             //上传
BufSize = $F000;
var
Buffer: TBytes;
ReadCount: Integer;
FS: TFileStream;
begin

if not DirectoryExists(AppPath + SaveFolder) then
    CreateDir(AppPath + SaveFolder);
try
FS := TFileStream.Create(AppPath + SaveFolder + AfileName, FmCreate);
    if Stream.Size = -1 then // 大小未知则一直读取到没有数据为止
    begin
      SetLength(Buffer, BufSize);
      repeat
        ReadCount := Stream.Read(Buffer[0], BufSize);
        if ReadCount > 0 then
          FS.WriteBuffer(Buffer[0], ReadCount);
        if ReadCount < BufSize then
          break;
      until ReadCount < BufSize;
    end
    else // 大小已知则直接复制数据
      FS.CopyFrom(Stream, 0);
    Result := True;
    FMan.Insertlog('客户端上传文件成功:'+AppPath+AfileName);
Except
    FMan.Insertlog('客户端上传文件失败:'+AppPath+AfileName);
    Result := False;
end;
   FreeAndNil(FS);
end;


客户端上传调用代码:

Function TDtM.PutFile(faName,toName: String):Boolean;
var aSeream:TStream;
begin
  try
    aSeream:=TStream.Create;
    aSeream:=TfileStream.Create(faName,fmShareDenyNone);
    Result:=aiapp.PutFile(toName,'file\',aSeream); //这一行在第二次上传时会报内存错误。

  Except
  end;
  FreeAndNil(aSeream);
end;

[解决办法]
function TTServer.UpLoadFile(const sFileName, sSaveFolder: WideString;
  Ole: OleVariant): WordBool;
var S:string;
    MS: TMemoryStream;
begin
  MS:= TMemoryStream.Create;
  MS:=OleVariantToMemoryStream(Ole);
  if not DirectoryExists(MainPath + sSaveFolder) then CreateDir(MainPath + sSaveFolder);
  try
    MS.SaveToFile(MainPath + sSaveFolder + sFileName);
    Result := True;
    OrdN:=OrdN+1;
    S:=IntToStr(OrdN)+'、'+DatetimeToStr(Now)+'客户端上传文件成功:'+MainPath+sFileName;
    ServerFrm.Memo1.Lines.Add(S);
  Except
    Result := False;
    OrdN:=OrdN+1;
    S:=IntToStr(OrdN)+'、'+DatetimeToStr(Now)+'客户端上传文件失败:'+MainPath+sFileName;
    ServerFrm.Memo1.Lines.Add(S);
  end;
  FreeAndNil(MS);
end;
我用D7执行成功。D7不支持stream参数,必须使用OleVariant参数。

热点排行