ฉันกำลังทำงานกับแอปพลิเคชันที่มี REST API ขนาดเล็ก หนึ่งในวิธีการเหล่านี้จำเป็นต้องยอมรับการอัปโหลดไฟล์ไบนารีขนาดใหญ่ (เกือบ 300MB) ตามคำขอ PUT
เนื่องจากไฟล์มีขนาดค่อนข้างใหญ่ และเนื่องจากมีความเสี่ยงที่คำขอดังกล่าวหลายรายการจะทำงานพร้อมกัน ฉันจึงต้องการหลีกเลี่ยงการเก็บเนื้อหาคำขอทั้งหมดไว้ในหน่วยความจำ ฉันหวังที่จะทำเช่นนี้โดยการอ่านจากสตรีม php://input
โดยตรงและแยกออกเป็นไฟล์
อย่างไรก็ตาม ดูเหมือนว่าวิธี input()
ของคอนโทรลเลอร์กำลังรบกวน ฉันเข้าใจเหตุผลของ input()
เมื่อคุณอ่านสตรีม php://input
แล้ว สตรีมนั้นจะหายไป ดังนั้น input()
จึงเก็บไว้เพื่อเข้าถึงซ้ำ แน่นอนว่านี่คือพฤติกรรมที่ฉันต้องการหลีกเลี่ยงในกรณีนี้
ดูเหมือนว่า input()
จะถูกเรียกที่ไหนสักแห่งก่อนที่โค้ดคอนโทรลเลอร์ของฉันจะทำงาน เพราะเมื่อถึง php://input
ก็ไม่มีอะไรเหลือให้อ่านแล้ว
ดังนั้น คำถามของฉัน: มีวิธีใดที่คอนโทรลเลอร์ CakePHP จะสตรีมเนื้อหาคำขอที่มีขนาดใหญ่มากไปยังดิสก์โดยไม่ต้องโหลดทั้งหมดลงในหน่วยความจำก่อนหรือไม่