หน้านี้อธิบายวิธีส่งคำขอการอัปโหลดที่ดำเนินการต่อได้ใน Street View Publish API โปรโตคอลนี้ช่วยให้คุณดำเนินการอัปโหลดต่อได้หลังจากที่การสื่อสารล้มเหลวขัดขวางการไหลของข้อมูล ใช้ตัวเลือกนี้ในกรณีต่อไปนี้
- คุณกำลังอัปโหลดไฟล์ขนาดใหญ่
- มีโอกาสสูงที่เครือข่ายจะขัดข้องหรือการส่งข้อมูลอื่นๆ จะล้มเหลว (เช่น หากคุณอัปโหลดไฟล์จากแอปบนอุปกรณ์เคลื่อนที่)
การอัปโหลดต่อได้ยังช่วยลดการใช้แบนด์วิดท์เมื่อเครือข่ายล้มเหลว เนื่องจากคุณไม่ต้องเริ่มการอัปโหลดไฟล์ขนาดใหญ่ใหม่ตั้งแต่ต้น
หากคุณส่งไฟล์ขนาดเล็กผ่านการเชื่อมต่อเครือข่ายที่เชื่อถือได้ คุณสามารถใช้การอัปโหลดแบบง่ายแทนได้
การเริ่มเซสชันการอัปโหลดที่ดำเนินการต่อได้
หลังจากได้รับ uploadUrl แล้ว คุณจะเริ่มเซสชันการอัปโหลดต่อได้โดยทำดังนี้
- สร้างคำขอ
POSTไปยังuploadUrl เพิ่มส่วนหัว HTTP ต่อไปนี้
X-Goog-Upload-Protocol: ตั้งค่าเป็นresumableX-Goog-Upload-Header-Content-Length: ตั้งค่าเป็นจำนวนไบต์ทั้งหมดของข้อมูลไฟล์ ซึ่งจะโอนในคำขอที่ตามมาX-Goog-Upload-Header-Content-Type: ตั้งค่าเป็นประเภท MIME ของข้อมูลไฟล์X-Goog-Upload-Command: ตั้งค่าเป็นstart
ส่งคำขอ
ตัวอย่าง: การเริ่มเซสชันการอัปโหลดที่ดำเนินการต่อได้
ตัวอย่างต่อไปนี้แสดงวิธีเริ่มเซสชันการอัปโหลดต่อได้เพื่ออัปโหลดไฟล์ใหม่ ในกรณีนี้ ไฟล์เป็นรูปภาพและมีจำนวนไบต์ทั้งหมด 4200000 โปรดทราบว่าเนื้อหาของคำขอว่างเปล่า ดังนั้นส่วนหัว 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 ของเซสชันการอัปโหลดต่อได้
ตัวอย่างต่อไปนี้แสดงการตอบกลับที่มี 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, finalizeX-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 แสดงว่าการอัปโหลดสิ้นสุดลงแล้ว