Einzelnen Beitrag anzeigen

Hobbycoder

Registriert seit: 22. Feb 2017
955 Beiträge
 
#1

Dateiupload direkt zum PHP-Script

  Alt 30. Aug 2024, 10:58
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.
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.

Geändert von Hobbycoder (30. Aug 2024 um 12:35 Uhr)
  Mit Zitat antworten Zitat