Tôi đang cố lấy hình ảnh từ thư mục riêng để hiển thị trên trang mẫu Twig thân thiện với máy in.Các trình duyệt không thể truy cập thư mục riêng và phương pháp hiển thị duy nhất mà tôi biết là tải hình ảnh và chuyển đổi nó thành Base64 và chuyển các ký tự Base64 vào thuộc tính 'src' của phần tử 'img'.
mã điều khiển của tôi trông giống như thế này:
lớp Máy inFriendlyController mở rộng ControllerBase {
public function printerFriendly($text) {
// Tải hình ảnh từ thư mục riêng và chuyển đổi thành base64
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$image = $this->entityTypeManager
->getStorage('tệp')
-> tải($file_id);
$image_path = PrivateStream::basePath() . '/hình ảnh/' . $image->getFilename();
$image_data = file_get_contents($image_path);
$image_base64 = 'dữ liệu:' . finfo_file($finfo, $image_path) . ';base64,' . base64_encode($image_data);
$ trang = [
// Chắc chắn dài hơn 255 ký tự
'#image_base64' => $image_base64,
// Điều này cũng không hoạt động vì vậy đây không phải là vấn đề về độ dài ký tự
//'#image_base64' => 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAAABJRU5ErkJggg==',
'#text' => $text,
'#theme' => 'máy in_thân thiện',
];
trả lại trang $;
}
}
Tệp mẫu trông giống như thế này:
<div id="printer-friendly">
<img src="{{ image_base64 }}" />
<div id="text">{{ text }}</div>
</div>
Phần tử 'văn bản' chứa văn bản tùy chỉnh được định vị trên phần tử 'img' bằng CSS nhưng chỉ được đưa vào ngữ cảnh. Nó không liên quan đến vấn đề.
Kết quả xuất hiện trên Chrome Inspect là:
<img src="">
hoặc
<img src(unknown)>
Drupal hoặc Twig đang chặn các ký tự hình ảnh Base64 nhưng tôi không biết cái nào đang thực hiện việc chặn và tôi không biết cách ngăn nó làm như vậy.