我正在Delphi中创建一个项目,用于将多个文件上传到网络服务器,但不是更多的同一个字段上的文件就像在简单的表单上一样。在我的Delphi代码下面:
procedure Http_arquivos;
var
i: integer;
arquivos: array [0..6] of String;
HTTP: TIdHTTP;
POSTData: TIdMultipartFormDataStream;
begin
arquivos[0]:= 'c:\arquivo0.bmp';
arquivos[1]:= 'c:\arquivo1.bmp';
arquivos[2]:= 'c:\arquivo2.html';
arquivos[3]:= 'c:\arquivo3.html';
arquivos[4]:= 'c:\arquivo4.wav';
arquivos[5]:= 'c:\arquivo5.bmp';
arquivos[6]:= 'c:\arquivo6.txt';
HTTP := TIdHTTP.Create(nil);
POSTData := TIdMultipartFormDataStream.Create;
for i:= 0 to Length(arquivos) do
begin
if fileexists (arquivos[i]) then
begin
//showmessage(arquivos[i]);
try
POSTData.AddFile('files[]', arquivos[i], 'multipart/form-data');
HTTP.Post('http://localhost/ENVIO/MultUp.php', POSTData);
finally
POSTData.Free;
end;
end;
end;
end;
答案 0 :(得分:4)
您的代码有四个问题:
您的循环计数器错误。您需要改为使用Length(arquivos)-1
(或Pred(Length(arquivos))
或High(arquivos)
)。
你在循环中调用Post()
,但它需要在循环之外。
您为每个文件指定了错误的内容类型。
您正在每次循环迭代中销毁流。
请改为尝试:
POSTData := TIdMultipartFormDataStream.Create;
try
for i := Low(arquivos) to High(arquivos) do
begin
if FileExists(arquivos[i]) then
begin
//AddFile() will choose the content type for you based on the file extension
POSTData.AddFile('files[]', arquivos[i]);
end;
end;
HTTP.Post('http://localhost/ENVIO/MultUp.php', POSTData);
finally
POSTData.Free;
end;