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
usesfphttpclient, 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 pemakaianprocedure 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;
perhatikan uses,var (array)
jika tidak menggunakan field string maka array harus dikosongkan
sudah di tes 29-11-2025 berhasil di localhost menggunakan https