UploadDataProvider

abstract class UploadDataProvider : Closeable


คลาส Abstract ที่อนุญาตให้ผู้ฝังโค้ดระบุเนื้อหาการอัปโหลดไปยัง UrlRequest โดยรองรับการอัปโหลดทั้งแบบไม่แบ่งเป็นส่วนๆ (ทราบขนาดล่วงหน้า) และแบบแบ่งเป็นส่วนๆ (ไม่ทราบขนาดล่วงหน้า) โปรดทราบว่าเซิร์ฟเวอร์บางเครื่องไม่รองรับการอัปโหลดแบบแบ่งเป็นส่วนๆ

การอัปโหลดจะแบ่งเป็นส่วนๆ เสมอในการอัปโหลดหลายครั้งหากมีการส่งข้อมูลมากกว่า 1 ครั้ง หรือไม่แบ่งเป็นส่วนๆ เลย

สรุป

เครื่องมือสร้างสาธารณะ

ฟังก์ชันสาธารณะ

Unit

เรียกใช้เมื่อคำขอไม่ต้องการ UploadDataProvider นี้อีกต่อไป เพื่อให้ระบบปล่อยทรัพยากร (เช่น ไฟล์) ได้อย่างชัดเจน

abstract Long

หากเป็นการอัปโหลดแบบไม่แบ่งเป็นส่วนๆ ฟังก์ชันนี้จะแสดงความยาวของการอัปโหลด

abstract Unit
read(uploadDataSink: UploadDataSink!, byteBuffer: ByteBuffer!)

อ่านข้อมูลการอัปโหลดลงใน byteBuffer

abstract Unit
rewind(uploadDataSink: UploadDataSink!)

กรอข้อมูลการอัปโหลดกลับไปที่จุดเริ่มต้น

เครื่องมือสร้างสาธารณะ

UploadDataProvider

UploadDataProvider()

ฟังก์ชันสาธารณะ

ปิด

fun close(): Unit

เรียกใช้เมื่อคำขอไม่ต้องการ UploadDataProvider นี้อีกต่อไป เพื่อให้ระบบปล่อยทรัพยากร (เช่น ไฟล์) ได้อย่างชัดเจน

ส่ง
java.io.IOException

หากเกิด IOException ใดๆ ในระหว่างกระบวนการ ซึ่งจะทำให้คำขอไม่สำเร็จหากยังไม่เสร็จสมบูรณ์ หรือระบบจะบันทึกข้อผิดพลาด

getLength

abstract fun getLength(): Long

หากเป็นการอัปโหลดแบบไม่แบ่งเป็นส่วนๆ ฟังก์ชันนี้จะแสดงความยาวของการอัปโหลด และต้องแสดงผล -1 เสมอหากเป็นการอัปโหลดแบบแบ่งเป็นส่วนๆ

การคืนสินค้า
Long

ความยาวของการอัปโหลดสำหรับการอัปโหลดแบบไม่แบ่งเป็นส่วนๆ หรือ -1 ในกรณีอื่นๆ

ส่ง
java.io.IOException

หากเกิด IOException ใดๆ ในระหว่างกระบวนการ

อ่านแล้ว

abstract fun read(uploadDataSink: UploadDataSink!, byteBuffer: ByteBuffer!): Unit

อ่านข้อมูลการอัปโหลดลงใน byteBuffer เมื่อเสร็จสมบูรณ์แล้ว ระบบจะอัปเดตตำแหน่งของบัฟเฟอร์เป็นจุดสิ้นสุดของไบต์ที่อ่าน และจะไม่เปลี่ยนแปลงขีดจำกัดของบัฟเฟอร์ การเรียกใช้เมธอดนี้แต่ละครั้งต้องตามด้วยการเรียกใช้ uploadDataSink เพียงครั้งเดียว ไม่ว่าจะเป็นแบบซิงโครนัสหรืออะซิงโครนัส โดยจะเรียกใช้ onReadSucceeded หากสำเร็จ หรือ onReadError หากไม่สำเร็จ ระบบจะไม่เรียกใช้ทั้งการอ่านและการกรอกลับจนกว่าจะมีการเรียกใช้เมธอดใดเมธอดหนึ่ง แม้ว่าระบบจะยกเลิก UrlRequest ที่เชื่อมโยงแล้ว แต่ก็ยังต้องเรียกใช้เมธอดใดเมธอดหนึ่งก่อนจึงจะปล่อยทรัพยากรได้อย่างปลอดภัย การส่งข้อยกเว้นจะส่งผลให้ระบบปล่อยทรัพยากรและแสดงข้อผิดพลาดในคำขอด้วย

หมายเหตุ: สำหรับการอัปโหลดแบบไม่แบ่งเป็นส่วนๆ ควรเรียกใช้ onReadSucceeded ก็ต่อเมื่อการอ่านสำเร็จและมีการอ่านไบต์อย่างน้อย 1 ไบต์ลงใน byteBuffer สำหรับการอัปโหลดแบบแบ่งเป็นส่วนๆ (ไม่ทราบขนาดของข้อมูล) ระบบจะอนุญาตให้เรียกใช้ onReadSucceeded สำหรับส่วนสุดท้ายที่มีบัฟเฟอร์ไบต์ว่าง

พารามิเตอร์
uploadDataSink: UploadDataSink!

ออบเจ็กต์ที่จะแจ้งให้ทราบเมื่อการอ่านเสร็จสมบูรณ์

byteBuffer: ByteBuffer!

บัฟเฟอร์ที่จะคัดลอกไบต์ที่อ่าน ห้ามเปลี่ยนขีดจำกัดของ byteBuffer

ส่ง
java.io.IOException

หากเกิด IOException ใดๆ ในระหว่างกระบวนการ ระบบจะเรียกใช้ onFailed โดยตั้งค่าข้อยกเว้นที่ส่งเป็นสาเหตุของ CallbackException

กรอกลับ

abstract fun rewind(uploadDataSink: UploadDataSink!): Unit

กรอข้อมูลการอัปโหลดกลับไปที่จุดเริ่มต้น เรียกใช้เมื่อ Cronet ต้องการให้ผู้ให้บริการข้อมูลการอัปโหลดอยู่ในสถานะเทียบเท่ากับกรณีที่ยังไม่เคยเรียกใช้ read

หากต้องการส่งสัญญาณว่าการดำเนินการเสร็จสิ้นแล้ว การใช้งานฟังก์ชันนี้ต้องเรียกใช้ onRewindSucceeded เพื่อระบุว่าสำเร็จ หรือ onRewindError หากไม่สำเร็จ แม้ว่าระบบจะยกเลิก UrlRequest ที่เชื่อมโยงแล้ว แต่ก็ยังต้องเรียกใช้เมธอดใดเมธอดหนึ่งก่อนจึงจะปล่อยทรัพยากรได้อย่างปลอดภัย การส่งข้อยกเว้นจากเมธอดเทียบเท่ากับการเรียกใช้ onRewindError หากระบบไม่รองรับการกรอกลับ (เช่น หากอ่านจากสตรีมแบบครั้งเดียว) ฟังก์ชันนี้ควรเรียกใช้ onRewindError ทันที

ผู้ใช้สามารถสันนิษฐานได้อย่างปลอดภัยว่าระบบจะไม่เรียกใช้ read หรือการเรียกใช้ rewind พร้อมกันจนกว่าจะแจ้งให้ Sink ทราบว่าการกรอกลับเสร็จสิ้นแล้วตามที่อธิบายไว้ในย่อหน้าก่อนหน้า

Cronet ใช้เมธอดนี้ภายในหากต้องอัปโหลดเนื้อหาหลายครั้ง ซึ่งอาจเกิดขึ้นได้ในหลายสถานการณ์ เช่น เมื่อติดตามการเปลี่ยนเส้นทาง หรือเมื่อลองส่งคำขออีกครั้งหลังจากหมดเวลาหรือเครือข่ายถูกตัด โปรดทราบว่าแม้ว่าโดยทั่วไปแล้วการใช้งานการกรอกลับจะเป็นตัวเลือก แต่คำขอที่ต้องใช้การกรอกลับจะไม่สำเร็จหากไม่มีการใช้งานการกรอกลับ

พารามิเตอร์
uploadDataSink: UploadDataSink!

ออบเจ็กต์ที่จะแจ้งให้ทราบเมื่อการดำเนินการกรอกลับเสร็จสมบูรณ์ ไม่ว่าจะเป็นการดำเนินการที่สำเร็จหรือไม่ก็ตาม

ส่ง
java.io.IOException

หากเกิด IOException ใดๆ ในระหว่างกระบวนการ ระบบจะเรียกใช้ onFailed โดยตั้งค่าข้อยกเว้นที่ส่งเป็นสาเหตุของ CallbackException