Hi,
ich möchte unterschiedliche Dateien auf meinen Webserver hochladen in unterschiedliche Verzeichnisse (nicht zwingend). Dabei soll die Datei auf dem Server einen anderen Namen bekommen als der lokale Dateiname. Aber ich scheitere bereits am Upload.
Was ich bisher habe:
Delphi:
Delphi-Quellcode:
procedure TThreadUpload.Execute;
var
http: TIdHTTP;
ss: TStringStream;
s: string;
I: Integer;
DS: TIdMultiPartFormDataStream;
Failed: Boolean;
begin
http:=TIdHTTP.Create(nil);
ss:=TStringStream.Create;
Failed:=False;
try
try
for I := 0 to FFileList.Count-1 do
begin
s:='http://'+FServername+'/UploadInstallFiles.php';
s:=TIdURI.URLEncode(s);
DS:=TIdMultiPartFormDataStream.Create;
try
DS.AddFile('fileToUpload', FFileList[i].DestinationFilePath+FFileList[i].DestinationFileName, 'application/octet-stream');
http.Request.ContentType:='multipart/form-data; boundary='+DS.Boundary;
http.Request.AcceptEncoding:='';
http.Request.Accept:='';
http.Request.Host:='';
http.Request.UserAgent:='';
http.HandleRedirects := True;
http.Put(s, DS, ss);
finally
DS.Free;
end;
DoRequestResponse(SS.DataString);
if http.ResponseCode=200 then
begin
s:=ss.DataString;
if Pos('has been uploaded', s)>0 then
begin
DoSuccess(FFileList[i].DestinationFilePath+FFileList[i].DestinationFileName, FUploadFileType);
end else begin
DoFailed(FUploadFileType);
Failed:=True;
end;
end else begin
DoFailed(FUploadFileType);
Failed:=True;
end;
if Failed then Break;
end;
except
DoFailed(FUploadFileType);
end;
finally
http.Free;
ss.Free;
DoFinished(FUploadFileType, Failed);
end;
end;
PHP:
Code:
<?php
$target_dir = "Install/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
print_r($_FILES);
if(isset($_POST["submit"])) {
$uploadOk = 0;
}
if (file_exists($target_file)) {
unlink($target_file);
}
if ($uploadOk == 0) {
echo "Sorry, your file was not uploaded.";
} else {
echo 'Filename: '.$_FILES["fileToUpload"]["tmp_name"].'<br/>';
echo 'Targetfilename: '.$target_file.'<br/>';
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
echo "The file ". htmlspecialchars( basename( $_FILES["fileToUpload"]["name"])). " has been uploaded.";
} else {
echo "Sorry, there was an error uploading your file.";
}
}
?>
Vom Server kommt 'Array'#$A'('#$A')'#$A'Filename: <br/>Name: Targetfilename: Install/<br/>Sorry, there was an error uploading your file.'
Ich bin ein bisschen Ratlos, woran's liegt. Irgendwas ist da wohl in dem MultipartFormdata noch nicht korrekt eingestellt.
Außerdem müsste ich ja noch ein weitere Parameter mit dem Dateinamen auf den Webserver übergeben, denn die Dateien sollen ja dort einen anderen haben. Das habe ich aber erst mal nach hinten geschoben, weil ja der Fileupload erst mal funktionieren muss.
Vielleicht hat einer die Muße sich das mal anzuschauen.