จะเปลี่ยนขนาดชิ้นและดึงข้อมูลชิ้นเฉพาะใน Mongodb Gridfs ได้อย่างไร

ตอนนี้ฉันค่อนข้างใหม่ใน Mongodb สิ่งที่ฉันต้องการทำคือการแทรกไฟล์ PDF ขนาด 3MB โดยใช้ไดรเวอร์ JAVA และต้องการเปลี่ยนขนาดชิ้นจาก 256 เป็น 1mb จากนั้นต้องการดึงข้อมูลชิ้นที่สองโดยบอกว่าหน้าที่ 2 ของเอกสาร pdf ฉันจะทำเช่นนั้นได้อย่างไร ขอบคุณ.


person Community    schedule 20.02.2014    source แหล่งที่มา


คำตอบ (1)


โดยทั่วไป เมื่อเขียนเอกสารลงใน GridFS แล้ว คุณจะต้องเขียนใหม่ (ลบและบันทึกอีกครั้ง) เพื่อแก้ไขขนาดก้อน

เนื่องจาก GridFS ไม่ทราบอะไรเกี่ยวกับรูปแบบของข้อมูลในไฟล์ จึงไม่สามารถช่วยให้คุณไปที่ "หน้าที่ 2" ได้ การใช้งาน InputStream ที่ส่งคืนจาก GridFSDBFile จะหลีกเลี่ยงการอ่านบล็อคเมื่อคุณใช้เมธอด skip(long) หากคุณรู้ว่า "หน้าที่ 2" มีขนาด N ไบต์ในไฟล์ คุณสามารถข้ามไบต์จำนวนมากนั้นในสตรีมและเริ่มอ่านได้

เอชทีเอช, ร็อบ

ป.ล. โปรดจำไว้ว่า skim(long) ส่งคืนจำนวนไบต์ที่ข้ามจริง คุณไม่ควรสรุปว่าการข้าม (12) จะข้าม 12 ไบต์เสมอไป

P.P.S เริ่มอ่านจากกลาง PDF และทำความเข้าใจว่ามีอะไรจะยากบ้างเว้นแต่คุณจะรักษาสถานะจากหน้าที่แล้วไว้

person Rob Moore    schedule 21.02.2014
comment
ขอขอบคุณสำหรับฟังก์ชัน Skip() แต่เราจะเปลี่ยนขนาดก้อนได้อย่างไร โดยบอกว่าฉันได้เปลี่ยนขนาดของก้อนก่อนที่จะบันทึกโดย gfsinputfile.setChunkSize(values ​​in bytes) แต่ฉัน สังเกตว่าในขนาดชิ้นเอาต์พุตมันจะแสดง 262144 เสมอว่าฉันจะจัดการกับมันได้อย่างไร - person ; 21.02.2014
comment
คุณได้ลองใช้ตัวแปร save(long) แทนการตั้งค่าขนาดก้อนแล้วเรียก save() หรือไม่? หากคุณใช้ GridFSInputFile.getOutpuStream() คุณต้องแน่ใจว่ามีการเรียก setChunkSize(...) ก่อน getOutputStream() มิฉะนั้น setChunkSize(...) จะไม่ดำเนินการ - person Rob Moore; 22.02.2014