Jumat, 28 November 2025

Upload file melalui https

gunakan script php berikut untuk menerima file pada server dan sesuaikan dengan kebutuhan: 

file_receiver.php
<?php

header("Content-Type: application/json");

// cek apakah file diterima
if (!isset($_FILES["file"])) {
    echo json_encode(["status" => "error", "msg" => "No file uploaded"]);
    exit;
}

// cek error
if ($_FILES["file"]["error"] !== 0) {
    echo json_encode(["status" => "error", "msg" => "Upload error"]);
    exit;
}

//contoh ambil data string hapus jika tidak menggunakan field string
$user=$_POST["username"];
$pekerjaan=$_POST["pekerjaan"];

$target = "folder_2/".basename($_FILES["file"]["name"]);

if (move_uploaded_file($_FILES["file"]["tmp_name"], $target)) 
{
    echo json_encode(["status" => "success", 
    "filename" => $_FILES["file"]["name"],
    "username"=>$user,
    "pekerjaan"=>$pekerjaan]);
} else 
{
    echo json_encode(["status" => "error", "msg" => "Failed to move file"]);
}

?>

Catatan
-untuk mengambil data dari field (string) gunakan "$_POST"
-penamaan file ada pada variable "$target"


Fungsi Upload pada lazarus

uses
fphttpclient, openssl,opensslsockets;   

var
  aFieldName:array of string;
  aFieldValue:array of string;  

procedure bpiUploadFile(aURL, aFile: String);
var
  i:Integer;
  Client: TFPHTTPClient;
  Payload: TMemoryStream;
  FileStream: TFileStream;
  Boundary, CRLF, Line: String;
  Response: TStringStream;

  procedure AddField(const FieldName, FieldValue: string);
  begin
    Line :=
      '--' + Boundary + CRLF +
      'Content-Disposition: form-data; name="' + FieldName + '"' + CRLF +
      CRLF +
      FieldValue + CRLF;
    Payload.Write(Line[1], Length(Line));
  end;

  procedure AddFile(const FieldName, FileName: string);
  begin
    Line :=
      '--' + Boundary + CRLF +
      'Content-Disposition: form-data; name="' + FieldName +
      '"; filename="' + ExtractFileName(FileName) + '"' + CRLF +
      'Content-Type: application/octet-stream' + CRLF + CRLF;
    Payload.Write(Line[1], Length(Line));
  end;

begin
  InitSSLInterface;

  Boundary := '----WebKitFormBoundary7MA4YWxkTrZu0gW';
  CRLF := #13#10;

  Client := TFPHTTPClient.Create(nil);
  Payload := TMemoryStream.Create;
  Response := TStringStream.Create('');

  FileStream := TFileStream.Create(aFile, fmOpenRead);

  try
    // Set header multipart
    Client.AddHeader('Content-Type', 'multipart/form-data; boundary=' + Boundary);

    // ========================================================
    // Tambahkan beberapa FIELD (string)
    // ========================================================
    if Length(aFieldName)>0 then
    begin
      for i:=0 to High(aFieldName) do
      begin
        AddField(aFieldName[i],aFieldValue[i]);
      end;
    end;

    // ========================================================
    // Tambahkan FILE
    // ========================================================
    AddFile('file', fu.eFile.Text);
    Payload.CopyFrom(FileStream, FileStream.Size);
    Payload.Write(CRLF[1], Length(CRLF));

    // ========================================================
    // Closing Boundary
    // ========================================================
    Line := '--' + Boundary + '--' + CRLF;
    Payload.Write(Line[1], Length(Line));

    Payload.Position := 0;
    Client.RequestBody := Payload;

    Response.WriteString(Client.Post(aURL));

    ShowMessage('Server reply: ' + Response.DataString);

  except
    on E: Exception do
      ShowMessage('Error: ' + E.Message);
  end;

  FileStream.Free;
  Payload.Free;
  Response.Free;
  Client.Free;
end;                    
  
//contoh pemakaian
procedure Tfu.Button1Click(Sender: TObject);
begin
  //menggunakan field tambahan (string)
  SetLength(aFieldName,2);
  SetLength(aFieldValue,2);
  //isi field
  aFieldName[0]:='username';
  aFieldValue[0]:='budi';
  aFieldName[1]:='pekerjaan';
  aFieldValue[1]:='wiraswasta';

  //jika tidak menggunakan field string maka array dikosongkan
  //SetLength(aFieldName,0);
  //SetLength(aFieldValue,0);

  bpiUploadFile(eURL.Text,eFile.Text);
end; 


Catatan
perhatikan uses,var (array) 
jika tidak menggunakan field string maka array harus dikosongkan
sudah di tes 29-11-2025 berhasil di localhost menggunakan https