Score:0

วิธีตั้งค่าฟิลด์ไฟล์ที่เข้ารหัสโดยทางโปรแกรม

ธง je

ฉันกำลังพยายามตั้งค่าฟิลด์ไฟล์ที่เข้ารหัสโดยทางโปรแกรม ฉันกำลังใช้ ไฟล์ที่เข้ารหัส โมดูล. ฉันกำหนดค่าฟิลด์ไฟล์สำเร็จแล้ว และใช้ได้กับเนื้อหาที่สร้างโดยใช้แบบฟอร์มเพิ่มโหนด

ในรหัสที่กำหนดเอง ฉันได้รับไฟล์โดยใช้ไฟล์ Httpไคลเอนต์ และต้องการแนบไปกับสื่อ ฉันสามารถรับไฟล์ เข้ารหัส และบันทึกได้ อย่างไรก็ตาม ถ้าฉันต้องการเปิดไฟล์ มันใช้งานไม่ได้

สิ่งที่ฉันกำลังทำมีดังนี้:

  $client = Drupal::httpClient();

  // รับข้อมูลจากรีโมตเพจและเข้ารหัสโดยใช้โปรไฟล์การเข้ารหัส
  $data = (string) $client->get('https://example.com/download.php?file=123')
    ->getBody();
  $encryptionProfile = Drupal::entityTypeManager()
    ->getStorage('encryption_profile')
    ->โหลด ('my_encryption_profile');
  $encryptedData = Drupal::service('การเข้ารหัส')
    ->เข้ารหัส($data, $encryptionProfile);

  // สร้างเอนทิตีสื่อและเตรียมไดเร็กทอรีปลายทาง
  $media = Drupal::entityTypeManager()->getStorage('สื่อ')
    ->create(['bundle' => 'my_media_type']);
  $destination = 'เข้ารหัส://my_encryption_profile/path/to/files'
  Drupal::service('ไฟล์_ระบบ')
    ->prepareDirectory(ปลายทาง$, FileSystemInterface::CREATE_DIRECTORY);

  // บันทึกข้อมูลเป็นไฟล์และแนบกับสื่อ
  $filename = 'ดาวน์โหลด.pdf';
  $file = file_save_data($encryptedData, $ปลายทาง . '/' . $filename);
  $media->set('encrypted_file', ['target_id' => $file->id()]);
  $media->save();
cn flag
ตัวห่อหุ้มสตรีม `เข้ารหัส` คือ _a ตัวห่อหุ้มโครงร่างที่เข้ารหัส / ถอดรหัสโดยอัตโนมัติ_ - ดังนั้นคุณอาจเพิ่มขึ้นเป็นสองเท่าโดยการเข้ารหัสข้อมูลด้วยตัวคุณเอง
Елин Й. avatar
je flag
ฉันก็คาดหวังเช่นเดียวกัน แต่ถ้าฉันใช้ `$data` แทน `$encryptedData` เช่น `file_save_data($data, $destination . '/' . $filename)` ไฟล์จะถูกบันทึกโดยไม่มีการเข้ารหัสและฉันสามารถเปิด ในระบบไฟล์ การดาวน์โหลดไฟล์ผ่าน stream wrapper ยังคงไม่ทำงาน
Елин Й. avatar
je flag
@ ไคลฟ์ขอบคุณที่แสดงทิศทางที่ถูกต้องให้ฉัน ก่อนอื่นฉันดาวน์โหลดไฟล์ด้วย `httpClient` แล้วจึงบันทึกโดยใช้ `file_save_data` นี่เป็นการข้าม wrapper แบบแผนไม่ว่าจะด้วยเหตุผลใดก็ตาม นั่นเป็นเหตุผลที่ฉันพยายามเข้ารหัสด้วยตนเองก่อนที่จะบันทึก ฉันเปลี่ยนรหัสและใช้ `httpClient` โดยตรงเพื่อดาวน์โหลดไปยังปลายทาง และมันทำงานได้โดยไม่ต้องเข้ารหัสด้วยตนเอง! ฉันจะโพสต์วิธีแก้ปัญหาโดยละเอียดในวันถัดไปทันทีที่มีเวลา

โพสต์คำตอบ

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