Thực hiện quá trình tải lên tiếp nối

Trang này mô tả cách tạo yêu cầu tải lên tiếp tục trong API Xuất bản Chế độ xem đường phố. Giao thức này cho phép bạn tiếp tục hoạt động tải lên sau khi lỗi giao tiếp làm gián đoạn luồng dữ liệu. Sử dụng lựa chọn này trong trường hợp:

  • Bạn đang tải các tệp lớn lên.
  • Khả năng gián đoạn mạng hoặc một số lỗi truyền khác là cao (ví dụ: nếu bạn đang tải tệp lên từ ứng dụng dành cho thiết bị di động).

Việc tải lên tiếp nối cũng có thể làm giảm mức sử dụng băng thông khi có lỗi mạng, vì bạn không phải bắt đầu lại quá trình tải các tệp lớn lên từ đầu.

Nếu đang gửi các tệp nhỏ qua kết nối mạng đáng tin cậy, bạn có thể sử dụng một cách tải lên đơn giản.

Bắt đầu phiên tải lên có thể tiếp tục

Sau khi nhận được uploadUrl, bạn có thể bắt đầu một phiên tải lên tiếp tục:

  1. Tạo một yêu cầu POST cho uploadUrl.
  2. Thêm các tiêu đề HTTP sau đây:

    • X-Goog-Upload-Protocol: Đặt thành resumable.
    • X-Goog-Upload-Header-Content-Length: Đặt thành tổng số byte của dữ liệu tệp sẽ được chuyển trong các yêu cầu tiếp theo.
    • X-Goog-Upload-Header-Content-Type: Đặt thành loại MIME của dữ liệu tệp.
    • X-Goog-Upload-Command: Đặt thành start.
  3. Gửi yêu cầu.

Ví dụ: Bắt đầu phiên tải lên có thể tiếp tục

Ví dụ sau cho thấy cách bắt đầu một phiên có thể tiếp tục để tải tệp mới lên. Trong trường hợp này, tệp là một hình ảnh và tổng số byte trong tệp là 4200000. Lưu ý rằng phần nội dung của yêu cầu trống; do đó, tiêu đề Content-Length được đặt thành 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

Bài viết Lưu URL phiên có thể tiếp tục mô tả cách xử lý phản hồi cho yêu cầu bắt đầu phiên tải lên có thể tiếp tục.

Đang lưu URL phiên có thể tiếp tục

Đối với yêu cầu được gửi để bắt đầu phiên tải lên có thể tiếp tục, máy chủ sẽ trả lời bằng mã trạng thái HTTP 200 OK, bao gồm cả tiêu đề sau:

  • X-Goog-Upload-URL: Một URL duy nhất phải được dùng để hoàn tất quá trình tải lên thông qua tất cả các yêu cầu còn lại.

Sao chép và lưu URL khôi phục để bạn có thể sử dụng cho các yêu cầu tiếp theo.

Ví dụ: Lưu URL phiên có thể tiếp tục

Ví dụ sau đây cho thấy một phản hồi bao gồm URL phiên có thể tiếp tục và yêu cầu về độ chi tiết của kích thước.

HTTP/1.1 200 OK
X-Goog-Upload-URL: https://streetviewpublish.googleapis.com/media/user/123456789/photo/01234?upload_id=AEnB2U&upload_protocol=resumable

Đang tải tệp lên

Có hai cách để tải tệp lên có phiên có thể tiếp tục:

  1. Trong một yêu cầu duy nhất. Phương pháp này thường là tốt nhất vì cần ít yêu cầu hơn, nên có thể mang lại hiệu suất cao hơn.
  2. Chia thành nhiều phần. Sử dụng phương pháp này trong trường hợp:
    • Bạn cần phải giảm lượng dữ liệu được chuyển trong mọi yêu cầu. Bạn có thể cần thực hiện việc này khi có giới hạn thời gian cố định cho từng yêu cầu.
    • Bạn cần cung cấp chỉ báo tuỳ chỉnh cho biết tiến trình tải lên.
    • Bạn cần biết thời điểm an toàn để loại bỏ dữ liệu.

Yêu cầu duy nhất

Cách tải tệp lên trong một yêu cầu duy nhất:

  1. Tạo một yêu cầu POST đến URL của phiên có thể tiếp tục.
  2. Thêm dữ liệu của tệp vào nội dung yêu cầu.
  3. Thêm các tiêu đề HTTP sau đây:

    • Content-Length: Đặt thành số byte trong tệp.
    • X-Goog-Upload-Command: Đặt thành upload, finalize.
  4. Gửi yêu cầu.

Nếu yêu cầu tải lên bị gián đoạn hoặc bạn nhận được phản hồi 5xx, hãy làm theo quy trình trong bài viết Tiếp tục quá trình tải lên bị gián đoạn.

Nhiều phần

Cách tải tệp lên theo nhiều phần:

  1. Tạo một yêu cầu POST đến URL của phiên có thể tiếp tục.
  2. Thêm dữ liệu của phân đoạn vào nội dung yêu cầu. Tạo các đoạn theo bội số của 2 MiB (mebibyte), ngoại trừ đoạn cuối cùng hoàn tất quá trình tải lên. Giữ kích thước phân đoạn lớn nhất có thể để tải lên hiệu quả.
  3. Thêm các tiêu đề HTTP sau đây:

    • Content-Length: Đặt thành số byte trong đoạn.
    • X-Goog-Upload-Command: Đặt thành upload. Đối với phân đoạn cuối cùng, hãy đặt thành upload, finalize.
    • X-Goog-Upload-Offset: Đặt thành độ lệch mà byte sẽ được ghi. Lưu ý rằng các byte phải được tải lên theo tuần tự.
  4. Gửi yêu cầu. Nếu yêu cầu tải lên bị gián đoạn hoặc bạn nhận được phản hồi 5xx, hãy làm theo quy trình trong bài viết Tiếp tục quá trình tải lên bị gián đoạn.

  5. Lặp lại các bước từ 1 đến 4 cho từng phần còn lại trong tệp.

Ví dụ: Tải tệp lên

Yêu cầu duy nhất

Ví dụ sau đây cho thấy một yêu cầu tiếp nối để tải toàn bộ tệp JPEG 4.200.000 byte lên trong một yêu cầu duy nhất, bằng cách sử dụng URL phiên có thể tiếp tục thu được ở bước trước:

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]

Nếu yêu cầu thành công, bạn sẽ nhận được mã trạng thái HTTP 200 OK.

Nhiều phần

Ví dụ sau đây cho thấy một yêu cầu tiếp tục để tải tệp JPEG 4.200.000 byte lên nhiều phần bằng cách sử dụng URL phiên tiếp nối và độ chi tiết về kích thước thu được ở bước trước. Ví dụ này sử dụng kích thước đoạn là 2097000 byte, là bội số của 2 MiB (mebibyte).

Phân đoạn đầu tiên:

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]

Phân đoạn thứ hai:

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]

Phân đoạn cuối cùng:

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]

Tiếp tục quá trình tải lên bị gián đoạn

Nếu yêu cầu tải lên bị gián đoạn hoặc nếu bạn nhận được mã trạng thái HTTP không phải 200, hãy truy vấn máy chủ để tìm hiểu xem quá trình tải lên đã thành công bao nhiêu phần:

  1. Tạo một yêu cầu POST đến URL của phiên có thể tiếp tục.
  2. Đặt X-Goog-Upload-Command thành query.
  3. Gửi yêu cầu.

Máy chủ sẽ phản hồi bằng mã trạng thái HTTP 200 OK và kích thước hiện tại của tệp tải lên:

HTTP/1.1 200 OK
X-Goog-Upload-Status: active
X-Goog-Upload-Size-Received: 100

Sau đó, bạn có thể tiếp tục tải lên với mức chênh lệch này. Bạn phải tiếp tục ở mức chênh lệch do máy chủ cung cấp trừ phi bạn gửi lệnh tải lên và hoàn tất kết hợp. Trong trường hợp đó, bạn cũng có thể tiếp tục ở mức chênh lệch 0.

Nếu tiêu đề X-Goog-Upload-Status trong phản hồi HTTP của lệnh truy vấn có mặt và giá trị không phải là active, thì quá trình tải lên đã bị kết thúc.