Я работаю над программой, и мне нужно загрузить "log.txt" на веб-сервер.. по http
я искал и добрался до этого: -
Delphi 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
, который ожидает, что клиент $_FILES
HTML-форму в формате MIME multipart/form-data
:
Загрузка файлов > Загрузка POST-метода
PHP способен получать загрузки файлов из любого совместимого с RFC-1867 браузера.
RFC 1867 Загрузка файлов на основе форм в формате HTML
Но этот формат не является тем, что ваше приложение фактически публикует. Это просто размещение исходного содержимого файла как есть без метаданных MIME для описания файла. Вот почему ваш PHP-код не работает.
Чтобы опубликовать веб-форму HTML с TIdHTTP.Post()
multipart/form-data
с помощью TIdHTTP.Post()
, вам необходимо использовать класс 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
для загрузки файлов:
Загрузка файлов > Поддержка метода PUT
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);
?>