ฉันกำลังพยายามรับรูปภาพจากโฟลเดอร์ส่วนตัวเพื่อแสดงบนหน้าเทมเพลต Twig ที่เป็นมิตรกับเครื่องพิมพ์เบราว์เซอร์ไม่สามารถเข้าถึงโฟลเดอร์ส่วนตัวได้ และวิธีการแสดงผลวิธีเดียวที่ฉันรู้คือการโหลดรูปภาพและแปลงเป็น Base64 และส่งอักขระ Base64 ไปยังแอตทริบิวต์ 'src' ขององค์ประกอบ 'img'
รหัสคอนโทรลเลอร์ของฉันมีลักษณะดังนี้:
คลาส PrinterFriendlyController ขยาย ControllerBase {
เครื่องพิมพ์ฟังก์ชั่นสาธารณะที่เป็นมิตร (ข้อความ $) {
// โหลดรูปภาพจากไดเร็กทอรีส่วนตัวและแปลงเป็น base64
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$image = $this->entityTypeManager
->getStorage('ไฟล์')
->โหลด($file_id);
$image_path = PrivateStream::basePath() '/ภาพ/' . $image->getFilename();
$image_data = file_get_contents($image_path);
$image_base64 = 'ข้อมูล:' finfo_file($finfo, $image_path) . ';base64,' . base64_encode($image_data);
$หน้า = [
// ยาวเกิน 255 ตัวอักษรแน่นอน
'#image_base64' => $image_base64,
// วิธีนี้ใช้ไม่ได้เช่นกัน ดังนั้นจึงไม่ใช่ปัญหาความยาวของอักขระ
//'#image_base64' => 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==',
'#text' => $text,
'#theme' => 'printer_friendly',
];
กลับหน้า $;
}
}
ไฟล์เทมเพลตมีลักษณะดังนี้:
<div id="printer-friendly">
<img src="{{ image_base64 }}" />
<div id="text">{{ text }}</div>
</div>
องค์ประกอบ 'ข้อความ' มีข้อความที่กำหนดเองซึ่งวางอยู่เหนือองค์ประกอบ 'img' โดยใช้ CSS แต่รวมอยู่ในบริบทเท่านั้น มันไม่เกี่ยวข้องกับปัญหา
ผลลัพธ์ที่ปรากฏใน Chrome Inspect คือ:
<img src="">
หรือ
<img src(unknown)>
Drupal หรือ Twig กำลังบล็อกอักขระรูปภาพ Base64 แต่ฉันไม่รู้ว่าตัวใดกำลังบล็อกอยู่ และฉันไม่รู้วิธีป้องกันไม่ให้ทำเช่นนั้น