หน้านี้จะอธิบายวิธีส่งคำขออัปโหลดที่กลับมาทำงานอีกครั้งใน Street View เผยแพร่ API โปรโตคอลนี้ให้คุณดำเนินการอัปโหลดต่อได้ในกรณีที่การสื่อสารล้มเหลวซึ่งขัดขวางการรับส่งของข้อมูล ใช้ตัวเลือกนี้ในกรณีต่อไปนี้
- คุณกำลังอัปโหลดไฟล์ขนาดใหญ่
- โอกาสที่เครือข่ายจะหยุดชะงักหรือการส่งข้อมูลไม่สำเร็จอื่นๆ มีสูง (เช่น หากอัปโหลดไฟล์จากแอปบนอุปกรณ์เคลื่อนที่)
การอัปโหลดแบบดำเนินการต่อยังช่วยลดการใช้แบนด์วิดท์เมื่อเครือข่ายขัดข้องได้ด้วย เนื่องจากคุณไม่จำเป็นต้องรีสตาร์ทการอัปโหลดไฟล์ขนาดใหญ่ตั้งแต่ต้น
หากคุณส่งไฟล์ขนาดเล็กผ่านการเชื่อมต่อเครือข่ายที่เชื่อถือได้ คุณสามารถใช้การอัปโหลดง่ายๆ แทน
การเริ่มเซสชันการอัปโหลดที่ดำเนินการต่อได้
หลังจากได้รับ uploadUrl
แล้ว คุณสามารถเริ่มเซสชันการอัปโหลดที่ดำเนินการต่อได้ โดยทำดังนี้
- สร้างคำขอ
POST
ไปยังuploadUrl
เพิ่มส่วนหัว HTTP ต่อไปนี้
X-Goog-Upload-Protocol
: ตั้งเป็นresumable
X-Goog-Upload-Header-Content-Length
: ตั้งค่าเป็นจำนวนไบต์รวมของข้อมูลไฟล์ ซึ่งจะโอนในคำขอที่ตามมาX-Goog-Upload-Header-Content-Type
: ตั้งค่าเป็นประเภท MIME ของข้อมูลไฟล์X-Goog-Upload-Command
: ตั้งเป็นstart
ส่งคำขอ
ตัวอย่าง: การเริ่มเซสชันการอัปโหลดที่กลับมาทำงานต่อได้
ตัวอย่างต่อไปนี้แสดงวิธีเริ่มเซสชันที่กลับมาทำงานต่อได้เพื่ออัปโหลดไฟล์ใหม่ ในกรณีนี้ ไฟล์เป็นรูปภาพ และจำนวนไบต์ทั้งหมดในไฟล์คือ 4200, 000 โปรดทราบว่าเนื้อหาของคำขอว่างเปล่า ส่วนหัว Content-Length
จึงตั้งค่าเป็น 0
POST https://streetviewpublish.googleapis.com/media/user/123456789/photo/01234 HTTP/1.1
Authorization: Bearer [YOUR_AUTH_TOKEN]
Content-Length: 0
X-Goog-Upload-Protocol: resumable
X-Goog-Upload-Header-Content-Length: 4200000
X-Goog-Upload-Header-Content-Type: image/jpeg
X-Goog-Upload-Command: start
การบันทึก URL ของเซสชันที่กลับมาทำงานต่อได้จะอธิบายวิธีการจัดการการตอบกลับคำขอเพื่อเริ่มเซสชันการอัปโหลดที่กลับมาทำงานต่อได้
กําลังบันทึก URL ของเซสชันที่ดําเนินการต่อได้
สำหรับคำขอที่ส่งเพื่อเริ่มเซสชันการอัปโหลดที่กลับมาทำงานต่อได้ เซิร์ฟเวอร์จะตอบกลับพร้อมรหัสสถานะ HTTP 200 OK
รวมถึงส่วนหัวต่อไปนี้
X-Goog-Upload-URL
: URL ที่ไม่ซ้ำกันซึ่งต้องใช้เพื่อดำเนินการอัปโหลดผ่านคำขอที่เหลือทั้งหมดให้เสร็จสมบูรณ์
คัดลอกและบันทึก URL ของอินสแตนซ์ที่ดำเนินการต่อได้เพื่อให้คุณใช้สำหรับคำขอในลำดับต่อๆ ไปได้
ตัวอย่าง: การบันทึก URL ของเซสชันที่เรียกกลับมาทำงานอีกครั้งได้
ตัวอย่างต่อไปนี้แสดงการตอบกลับที่มี URL เซสชันที่กลับมาทำงานอีกครั้งได้และข้อกำหนดรายละเอียดของขนาด
HTTP/1.1 200 OK
X-Goog-Upload-URL: https://streetviewpublish.googleapis.com/media/user/123456789/photo/01234?upload_id=AEnB2U&upload_protocol=resumable
กำลังอัปโหลดไฟล์
มี 2 วิธีในการอัปโหลดไฟล์ที่มีเซสชันที่สามารถดำเนินการต่อได้ ดังนี้
- ในคำขอเดียว วิธีนี้มักจะดีที่สุดเพราะต้องการ คำขอน้อยกว่า จึงทำให้มีประสิทธิภาพดีกว่า
- แบ่งเป็นหลายๆ ส่วน ใช้วิธีการนี้ในกรณีต่อไปนี้
- คุณต้องลดจำนวนข้อมูลที่ถ่ายโอนในคำขอหนึ่งๆ คุณอาจต้องทำเช่นนี้เมื่อมีขีดจำกัดเวลาที่ตายตัวสำหรับคำขอแต่ละรายการ
- คุณต้องระบุตัวบ่งชี้ที่กำหนดเองที่แสดงความคืบหน้าของการอัปโหลด
- คุณจำเป็นต้องทราบว่าเมื่อใดที่จะสามารถทิ้งข้อมูลได้อย่างปลอดภัย
คำขอเดียว
วิธีอัปโหลดไฟล์ในคำขอเดียว
- สร้างคำขอ
POST
ไปยัง URL ของเซสชันที่กลับมาทำงานต่อได้ - เพิ่มข้อมูลของไฟล์ในเนื้อหาคำขอ
เพิ่มส่วนหัว HTTP ต่อไปนี้
Content-Length
: กำหนดเป็นจำนวนไบต์ในไฟล์X-Goog-Upload-Command
: ตั้งเป็นupload, finalize
ส่งคำขอ
หากคำขออัปโหลดหยุดชะงักหรือคุณได้รับการตอบกลับจาก 5xx
ให้ทำตามขั้นตอนในหัวข้อการดำเนินการอัปโหลดที่หยุดชะงักต่อ
แบบเปียกหลายชิ้น
วิธีอัปโหลดไฟล์เป็นหลายรายการ
- สร้างคำขอ
POST
ไปยัง URL ของเซสชันที่กลับมาทำงานต่อได้ - เพิ่มข้อมูลของกลุ่มลงในเนื้อหาคำขอ สร้างส่วนเป็นพหุคูณของ 2 MiB (เมบิไบต์) ยกเว้นส่วนสุดท้ายที่เสร็จสิ้นการอัปโหลด ลดขนาดวิดีโอให้ได้มากที่สุดเพื่อให้การอัปโหลดเป็นไปอย่างมีประสิทธิภาพ
เพิ่มส่วนหัว HTTP ต่อไปนี้
Content-Length
: กำหนดจำนวนไบต์ในกลุ่มX-Goog-Upload-Command
: ตั้งเป็นupload
สำหรับกลุ่มสุดท้าย ให้ตั้งค่าเป็นupload, finalize
X-Goog-Upload-Offset
: ตั้งค่าเป็นออฟเซ็ตที่ควรเขียนไบต์ โปรดทราบว่าต้องอัปโหลดไบต์ตามลำดับ
ส่งคำขอ หากคำขออัปโหลดหยุดชะงักหรือคุณได้รับการตอบกลับจาก
5xx
ให้ทำตามขั้นตอนในการดำเนินการอัปโหลดที่หยุดชะงักต่อทำซ้ำขั้นตอนที่ 1 ถึง 4 สำหรับแต่ละส่วนที่เหลือในไฟล์
ตัวอย่าง: การอัปโหลดไฟล์
คำขอเดียว
ตัวอย่างต่อไปนี้แสดงคำขอที่เรียกกลับมาดำเนินการต่อได้เพื่ออัปโหลดไฟล์ JPEG ทั้งไฟล์ 4,200,000 ไบต์ในคำขอเดียว โดยใช้ URL เซสชันที่กลับมาทำงานอีกครั้งได้จากขั้นตอนก่อนหน้า
POST https://streetviewpublish.googleapis.com/media/user/123456789/photo/01234?upload_id=AEnB2U&upload_protocol=resumable HTTP/1.1 Content-Length: 4200000 X-Goog-Upload-Command: upload, finalize X-Goog-Upload-Offset: 0 [BYTES 0-4199999]
หากคำขอประสบความสำเร็จ คุณจะได้รับรหัสสถานะ HTTP 200 OK
แบบเปียกหลายชิ้น
ตัวอย่างต่อไปนี้แสดงคำขอที่ดำเนินการต่อได้เพื่ออัปโหลดไฟล์ JPEG ขนาด 4,200,000 ไบต์ในหลายส่วน โดยใช้ URL เซสชันที่กลับมาทำงานต่อได้และรายละเอียดของขนาดที่ได้ในขั้นตอนก่อนหน้า ตัวอย่างนี้ใช้ขนาดกลุ่ม 2097000 ไบต์ ซึ่งเป็นผลคูณของ 2 MiB (เมบิไบต์)
กลุ่มแรก:
POST https://streetviewpublish.googleapis.com/media/user/123456789/photo/01234?upload_id=AEnB2U&upload_protocol=resumable HTTP/1.1 Content-Length: 2097000 X-Goog-Upload-Command: upload X-Goog-Upload-Offset: 0[BYTES 0-2096999]
กลุ่มที่ 2:
POST https://streetviewpublish.googleapis.com/media/user/123456789/photo/01234?upload_id=AEnB2U&upload_protocol=resumable HTTP/1.1 Content-Length: 2097000 X-Goog-Upload-Command: upload X-Goog-Upload-Offset: 2097000[BYTES 2097000-4193999]
กลุ่มสุดท้าย:
POST https://streetviewpublish.googleapis.com/media/user/123456789/photo/01234?upload_id=AEnB2U&upload_protocol=resumable HTTP/1.1 Content-Length: 6000 X-Goog-Upload-Command: upload, finalize X-Goog-Upload-Offset: 4194000[BYTES 4194000-4200000]
การอัปโหลดที่หยุดชะงักกลับมาทำงานอีกครั้ง
หากคำขอการอัปโหลดขัดข้องหรือคุณได้รับรหัสสถานะ HTTP ที่ไม่ใช่ 200
ให้ค้นหาเซิร์ฟเวอร์เพื่อดูว่าการอัปโหลดสำเร็จมากน้อยเพียงใด
- สร้างคำขอ
POST
ไปยัง URL ของเซสชันที่กลับมาทำงานต่อได้ - ตั้งค่า
X-Goog-Upload-Command
เป็นquery
- ส่งคำขอ
เซิร์ฟเวอร์จะตอบกลับด้วยรหัสสถานะ HTTP 200 OK
และขนาดปัจจุบันของการอัปโหลด ดังนี้
HTTP/1.1 200 OK
X-Goog-Upload-Status: active
X-Goog-Upload-Size-Received: 100
จากนั้น คุณสามารถกลับมาทำงานอีกครั้ง ณ ตำแหน่งเวลานี้ คุณต้องดำเนินการต่อที่ออฟเซ็ตที่เซิร์ฟเวอร์ให้ไว้ เว้นแต่คุณจะส่งคำสั่งการอัปโหลดและการสรุปแบบรวม ซึ่งในกรณีนี้คุณสามารถดำเนินการต่อที่ออฟเซ็ต 0 ได้เช่นกัน
หากมีส่วนหัว X-Goog-Upload-Status
ในการตอบกลับ HTTP ของคำสั่งคำค้นหาและค่าไม่ใช่ active
แสดงว่าการอัปโหลดถูกยกเลิกไปแล้ว