2015-10-20 2 views
1

je travaille sur un programme et j'ai besoin de télécharger un « log.txt » à un serveur Web .. par httpTélécharger un fichier vers le serveur Web Delphi + php

j'ai cherché et obtenu à ceci: -

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"; 
} 
?> 

mais aucun fichier en cours de téléchargement

merci pour votre aide

Répondre

10

Lisez la documentation de PHP.

Votre code PHP utilise $_FILES, qui attend le client d'afficher un formulaire en ligne HTML au format MIME multipart/form-data:

Handling file uploads>POST method uploads

PHP est capable de recevoir des fichiers de toute RFC- 1867 navigateur compatible.

RFC 1867 Form-based File Upload in HTML

Mais ce format n'est pas ce que votre demande est en fait l'affichage, cependant. Il affiche simplement le contenu du fichier brut tel quel sans métadonnées MIME pour décrire le fichier. C'est pourquoi votre code PHP ne fonctionne pas.

Pour poster un multipart/form-data HTML formulaire en ligne à l'aide TIdHTTP.Post(), vous devez utiliser la classe TIdMultipartFormDataStream, par exemple:

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; 

Sinon, PHP supporte aussi les requêtes HTTP PUT pour le téléchargement de fichiers:

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); 
?> 
+0

des thats répond à ma question, Résolu. – Someone

+0

Si c'est le cas, veuillez marquer la réponse comme acceptée. –

+1

@David Heffernan: Je n'avais pas le privilège d'accepter des réponses à l'époque !! Monsieur, avez-vous une mauvaise journée? vous avez voté tout ce que j'ai posté dans stackoverflow et m'a donné des exécutions de style politique. – Someone