Điểm:0

Tệp riêng tư không được hiển thị trên mẫu Twig

lá cờ ru

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.

MrD avatar
lá cờ cn
MrD
Còn nếu bạn sửa dữ liệu như dòng của bạn đã nhận xét `//'#image_base64' => 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHelEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==',`. hình ảnh có thể hiển thị?
lá cờ ru
Không, nó không. Tôi đã sử dụng dòng đó để xem liệu sự cố có phải do giới hạn ký tự gây ra hay không nhưng không phải vậy. Drupal đang lọc chuỗi Base64 vì một số lý do khác.
Điểm:1
lá cờ cn
MrD

Có thể vấn đề của bạn đến từ chủ đề chức năng printer_friendly. Nếu bạn xác định chức năng này, bạn phải cung cấp các biến khi xác định. Nếu chức năng này từ mô-đun đóng góp, bạn có thể sử dụng hook_pre process_printer_friendly để thêm nhiều biến hơn trước khi hiển thị trong mẫu cành cây.

lá cờ ru
Đó là một mô-đun tùy chỉnh với mẫu Twig. Nó có một số biến văn bản như '#text' hiển thị khi trang được hiển thị. Ngoài ra, nếu tôi mã hóa cứng hình ảnh Base64 trong mẫu bằng nội dung như '', hình ảnh hiển thị chính xác. Chỉ khi tôi cố gắng chuyển một biến chuỗi ký tự Base64 sang thuộc tính 'src' của hình ảnh thì Drupal hoặc Twig mới không cho phép nó và làm cho nó trống. Tôi biết chuỗi ký tự Base64 đang bị chặn nhưng tôi không biết ở đâu, tại sao hoặc liệu có cách nào để vượt qua nó hay không. Cảm ơn bạn đã phản hồi của bạn.
MrD avatar
lá cờ cn
MrD
bạn đã thử {{ image_base64|raw }}
lá cờ ru
Câu trả lời của bạn là đúng. Tôi chỉ không hoàn toàn hiểu nó trong lần đầu tiên tôi đọc nó. Tôi không nhớ đã thêm biến mới 'image_base64' vào 'hook_theme'. Sau khi tôi thêm nó, nó đã hoạt động với chuỗi kiểm tra chấm đỏ Base64 ngắn, nhưng khi chuỗi Base64 hình ảnh dài hơn 100 kilobyte được chuyển vào, 'RuntimeException: Không thể bắt đầu phiên vì các tiêu đề đã được gửi bởi...' đã bị ném nên tôi phải kích hoạt dịch vụ 'page_cache_kill_switch'. Cảm ơn bạn.
MrD avatar
lá cờ cn
MrD
@ user320691 Tại sao bạn không sử dụng tệp tin url mặc định? và sử dụng hook_file_download để điều khiển. Tôi nghĩ nó tốt hơn cho bạn.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.