ฉันกำลังพยายามอัปโหลดไฟล์หรือรูปภาพบนไซต์ D9 ผ่าน json api การทดสอบคือการอัปโหลดรูปภาพผู้ใช้ในเอนทิตีผู้ใช้
ฉันได้ติดตาม เอกสาร หรืออ่าน คำถามเกี่ยวกับแต่ฉันไม่สามารถทำให้มันทำงานได้
ส่วนหน้าทำด้วย Next.js
การทดสอบที่ทำมีดังต่อไปนี้:
ส่วนหน้าถัดไปเรียกเซิร์ฟเวอร์ next.js api:
ชื่อไฟล์ const = SelectedFile.name;
const fr = ใหม่ FileReader();
fr.readAsArrayBuffer(ไฟล์ที่เลือก);
fr.onload = ฟังก์ชัน async () {
    const arrayBuffer = fr.result;
    ถ้า (arrayBuffer && ประเภทของ arrayBuffer !== 'สตริง') {
        const base64String = _arrayBufferToBase64(arrayBuffer);
        const cookieSession = รอ getUpdateCookie ();
        const res = รอการดึงข้อมูล (`/api/users-test/user?cookie=${cookieSession}&name=${filename}`, {
            วิธีการ: 'POST', เนื้อหา: base64String,
        });
    }
}
ฟังก์ชัน _arrayBufferToBase64 (บัฟเฟอร์: ArrayBuffer) {
    ให้ไบนารี = '';
    ไบต์ const = ใหม่ Uint8Array (บัฟเฟอร์);
    const len = bytes.byteLength;
    สำหรับ (ให้ i = 0; i < len; i++) {
        ไบนารี += String.fromCharCode (ไบต์ [i]);
    }
    กลับ window.btoa (ไบนารี);
}
เซิร์ฟเวอร์ api next.js โพสต์ไปที่ Drupal:
const res = รอการดึงข้อมูล (
      `${process.env.NEXT_PUBLIC_DRUPAL_BASE_URL}/jsonapi/user/user/{userID}/user_picture`,
      {
        วิธีการ: 'โพสต์',
        ส่วนหัว: {
          'ประเภทเนื้อหา': 'แอปพลิเคชัน/ออคเต็ตสตรีม'
          ยอมรับ: 'application/vnd.api+json'
          'การจัดการเนื้อหา': `name="file"; ชื่อไฟล์ = "${ชื่อไฟล์}"`,
          การอนุญาต: `ผู้ถือ ${token}`,
        },
        ร่างกาย: req.body,
      }
    );
ฉันลองหลายวิธีในการแปลงไฟล์เป็น "ข้อมูลไฟล์ไบนารี" แต่ไม่ได้ผล: รูปภาพของผู้ใช้จะเป็นช่องสี่เหลี่ยมว่างที่มี X เสมอ
อย่างไรก็ตาม หากฉันลองโทรแบบเดียวกันกับบุรุษไปรษณีย์ ไฟล์จะโหลดอย่างถูกต้อง:

สำหรับตอนนี้ ฉันตั้งสมมติฐานว่าปัญหาอยู่ที่โค้ดจาวาสคริปต์ ในขณะที่ Drupal ได้รับการกำหนดค่าอย่างถูกต้อง