ฉันกำลังพยายามจัดเก็บอิมเมจ base64 จากปลั๊กอินฟิลด์ลายเซ็น (ปลั๊กอินจะแสดงผลเป็นข้อความ base64) แต่ก่อนที่ฉันจะสามารถเก็บไว้ในโฟลเดอร์ส่วนตัวได้ ฉันต้องแปลงมันเป็นรูปภาพ png ก่อน นี่คือวิธีที่ฉันทำตามปกติหากเพิ่งอัปโหลดรูปภาพ:
// ฟิลด์ลายเซ็นบน FormBuilder
$แบบฟอร์ม['ลายเซ็น'] = [
'#type' => 'managed_file',
'#title' => $this->t('ลายเซ็น'),
'#upload_location' => 'ส่วนตัว://requestformfiles',
'#upload_validators' => [
'file_validate_extensions' => ['png jpg',],
]
];
// บันทึกล่วงหน้า
$image = $form_state->getValue('ลายเซ็น');
$file = File::load( $image[0] );
$file->setPermanent();
$file->save();
แต่ด้วยอิมเมจ base64 ฉันต้องทำสิ่งนี้ก่อน:
$image = $form_state->getValue('ลายเซ็น');
$data = base64_decode(preg_replace('#^data:image/\w+;base64,#i', '', $image));
file_put_contents('storage/signature.png', $data);
ปัญหาของฉันอยู่ที่ file_put_contents
. ตำแหน่งบันทึกมักจะทำใน '#upload_location'
แต่ฉันไม่รู้ว่าจะทำอย่างไรใน file_put_contents
.
ความช่วยเหลือใด ๆ ที่ชื่นชม!