HTML是这样写的。<form name="form" method="post" action="UpFile.DLL"  enctype="multipart/form-data">
<input type="file" name="file1">
<input type="submit" name="Submit" value="上传">
</form>
在UpFile.DLL这个文件里面,
Request.Files.Count始终为0
Request.ContentFields.Text内容是:
7d52a81e1500fe Content-Disposition: form-data; name="file1" filename="D:\临时\Heart.bmp" Content-Type: image/bmp BM?
表明客户端提交的文件是正确的,可是Request.Files.Count始终为0,该怎么接收客户端传过来的文件和保存这个文件呢?

解决方案 »

  1.   

    看看下面的贴子对楼主有用不
    http://pi3web.sourceforge.net/support/msg00237.html
      

  2.   

    我刚查看过六七篇代码,都使用的是这种方式,但是都不去使用Request.Files.Count来判断文件数目.
    而是通过分解Boundary来判断。
    例:
    http://www.codenet.ru/progr/delphi/stat/dupload.php
    ---------------------------------------------------
    const
      UploadPath = 'C:\temp\upload\';...var
      AllContent, Boundary, Data: string;
      Header, HList: TStrings;
      OutStream: TFileStream;
    begin
      ...
      if Request.ContentLength = Length(AllContent) then
        while Length(AllContent) > Length('--' + Boundary + '--' + #13#10) do
        begin
          Header := TStringList.Create;
          HList := TStringList.Create;
          try
            AllContent := ReadMultipartRequest('--' + Boundary, AllContent,
              Header, Data);
            ExtractHeaderFields([';'], [' '],
             PChar(Header.Values['Content-Disposition']), HList, False, True);
            if (Header.Values['Content-Type'] <> '') and (Data <> '') then
            begin
              OutStream:=TFileStream.Create(UploadPath +
                ExtractFileName(HList.Values['filename']), fmCreate);
              try
                try
                  OutStream.WriteBuffer(Pointer(Data)^, Length(Data));
                  Response.Content := Response.Content +
                    Format('<p>File <b>%s</b> saved.',
                    [ExtractFileName(HList.Values['filename'])]);
                except
                  Response.Content := Response.Content +
                    Format('<p>Unable to save file <b>%s</b>.', [UploadPath +
                    ExtractFileName(HList.Values['filename'])]);
                end;
              finally
                OutStream.Free;
              end
            end
            else
              Response.Content := Response.Content + Format('<p>Field <b>%s</b> = %s',
                [HList.Values['name'], Data]);
          finally
            Header.Free;
            HList.Free;
          end;
        end;
        ...
      

  3.   

    多谢楼上,你给的这个是用ReadClient来读的,有些问题。这个代码没有多少实际意义,完全相当于测试,原意是用Request.Files.Items[0].Stream来操作保存文件而已。
    可是Request.Files.Count=0没戏
      

  4.   

    研究了好久,用ReadClient,然后再分解。
      

  5.   

    ISAPI中当然是不成的
    Request.Files.Count只能在WebSnap中用,在如TAbstractWebRequestFiles/TWebRequest只是个placeholder。
    你看看代码也能看的出来,是virtual; abstract;