Score:1

ฉันจะเก็บภาพ base64 ไว้ในโฟลเดอร์ส่วนตัวของเว็บไซต์ได้อย่างไร

ธง cn

ฉันกำลังพยายามจัดเก็บอิมเมจ 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.

ความช่วยเหลือใด ๆ ที่ชื่นชม!

Score:1
ธง cn

file_put_contents รองรับ stream wrapper ดังนั้น:

file_put_contents('private://path/to/storage/signature.png', $data);
cn flag
แดงไม่รู้ว่ามันใช้งานได้เช่นกัน ตอนนี้ปัญหาของฉันคือ `File::load` ไม่ "เห็น" ไฟล์ของฉันใน `file_put_contents` ดังนั้นฉันจึงตั้งค่าใน `file_managed` ไม่ได้

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา