将文件上传到Web服务器的Delphi + PHP
问题描述:
我工作的一个程序,我需要通过HTTP将文件上传到Web服务器的Delphi + PHP
我已经搜查,并得到了这一个“的log.txt”上传到网络服务器..: -
德尔福XE:
procedure TForm1.Button1Click(Sender: TObject);
begin
idhttp1.Post('http://127.0.0.1/GET2.php', 'C:\Users\Someone\Desktop\log.txt')
end;
PHP: -
<?php
$uploaddir = "uploads/";
$uploadfile = $uploaddir . basename($_FILES['file']['name']);
if(move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile))
{
echo "The file has been uploaded successfully";
}
else
{
echo "There was an error uploading the file";
}
?>
,但没有文件被你的帮助
答
阅读PHP文件上传
感谢。
PHP代码使用$_FILES
,其期待客户端在MIME发布一个HTML网页表单multipart/form-data
格式:
Handling file uploads>POST method uploads
PHP能够从任何RFC-接收文件上传的1867兼容浏览器。
RFC 1867 Form-based File Upload in HTML
但该格式是不是您的应用程序实际上是张贴,虽然。它只是简单地发布原始文件内容,没有MIME元数据来描述文件。这就是为什么你的PHP代码不工作。
要发布使用TIdHTTP.Post()
一个multipart/form-data
HTML网页表单,您必须使用TIdMultipartFormDataStream
类,如:
uses
..., IdHTTP, IdMultipartFormDataStream;
procedure TForm1.Button1Click(Sender: TObject);
var
PostData: TIdMultipartFormDataStream;
begin
PostData := TIdMultipartFormDataStream.Create;
try
PostData.AddFile('file', 'C:\Users\Someone\Desktop\log.txt');
idhttp1.Post('http://127.0.0.1/GET2.php', PostData)
finally
PostData.Free;
end;
end;
另外,PHP还支持HTTP文件上传PUT
请求:
Handling file uploads>PUT method support
procedure TForm1.Button1Click(Sender: TObject);
var
FS: TFileStream;
begin
FS := TFileStream.Create('C:\Users\Someone\Desktop\log.txt', fmOpenRead or fmShareDenyWrite);
try
idhttp1.Put('http://127.0.0.1/log.txt', FS);
finally
FS.Free;
end;
end;
<?php
/* PUT data comes in on the stdin stream */
$putdata = fopen("php://input", "r");
/* Open a file for writing */
$fp = fopen("log.txt", "w");
/* Read the data 1 KB at a time
and write to the file */
while ($data = fread($putdata, 1024))
fwrite($fp, $data);
/* Close the streams */
fclose($fp);
fclose($putdata);
?>
这就是回答我的问题,解决。 – Someone
如果是这样,请将答案标记为已接受。 –
@David Heffernan:我当时没有特权接受答案!先生,你过得不好吗?你投下了我曾经发布在*上的所有东西,并给了我政治风格的执行力。 – Someone