我正在尝试使用indy(HTTP Post)恢复上传,代码如下(使用Delphi 2010,Indy 10.4736):
IdHttp.Head('http://localhost/_tests/resume/large-file.bin');
ByteRange := IdHttp.Response.ContentLength + 1;
// Attach the file to post/upload
Stream := TIdMultipartFormDataStream.Create;
with Stream.AddFile('upload_file', 'D:\large-file.bin', 'application/octet-stream') do
begin
HeaderCharset := 'utf-8';
HeaderEncoding := '8';
end; // with
with IdHTTP do
begin
IOHandler.LargeStream := True;
with Request do
begin
ContentRangeStart := ByteRange;
ContentRangeEnd := (Stream.Size - ByteRange);
ContentLength := ContentRangeEnd;
ContentRangeInstanceLength := ContentLength;
end; // with
Post('http://localhost/_tests/resume/t1.php', Stream);
end; // with
但上传简历不起作用 :(
我查看了Indy的代码,似乎在IdIOHandler.pas中的这个函数:
TIdIOHandler.Write()
总是处理完整的流/文件(因为参数ASize:TIdStreamSize似乎总是为0,根据代码意味着发送完整的文件/流)。
这会阻止indy恢复上传。
我的问题是:有没有可能避免发送完整的文件?
设置内容范围没有改变任何东西。我还调整了indy的代码(修改了3行),使indy遵守内容范围/流位置,但它有错误,并且indy最终始终挂起在IdStackWindows.pas中,因为无限超时。
PUT
。 - OnTheFly