1

如果作为单个命令执行,下面的代码可以正常工作。我用它来下载通常为几兆字节的 PDF。

但是,当我在一个循环中多次执行它时,所有下载的文件大小完全相同(截断 @ ~50KB)。我的代码有问题还是服务器无法按预期交付?

type
  TKeyValuePair = record  
    Key:   String;
    Value: String;
  end;
  TKeyValueSet = Array of TKeyValuePair;

// ...

function TDM.MultipartPost(const URL, LocalFile: String; const MultipartData: TKeyValueSet): Boolean;
var
  i:          Integer;
  httpclient: THTTPClient;
  formdata:   TMultipartFormData;
  fstream:    TFileStream;

begin
  httpclient := THTTPClient.Create;
  formdata   := TMultipartFormData.Create();
  fstream    := nil;
  try
    fstream := TFileStream.Create(LocalFile, fmCreate);
  except
    // removed
  end;
  try
    for i := Low(MultipartData) to High(MultipartData) do
      formdata.AddField(MultipartData[i].Key, MultipartData[i].Value);
    try
      httpclient.Post(url, formdata, fstream);
    except
      // removed
    end;
  finally
    FlushFileBuffers(fstream.Handle);
    fstream.Free;
    formdata.Free;
    httpclient.Free;
    //
    Result := FileExists(LocalFile) and (GetFileSize(LocalFile) > 0); 
  end;
end;
4

1 回答 1

0

Mea culpa - 我向所有阅读/回复我帖子的人道歉。我刚刚构建了一个最小但完整的应用程序来演示这个问题,瞧,它工作得很好。

1 小时左右后看不到所有树木的森林:

我不小心使用了不正确的 URL 发帖到:(

于 2021-08-07T04:07:56.113 回答