Devam ettirilebilir yüklemeler

Bu sayfada, Google Photos Library API'ye nasıl devam ettirilebilir yükleme isteği gönderileceği açıklanmaktadır. REST protokolüyle açabilirsiniz. Bu protokol, bir yükleme işlemini devam ettirmenize olanak sağlar veri akışını kesintiye uğrattığında veri akışını bozar.

Şu durumlarda devam ettirilebilir yükleme seçeneğini kullanın:

  • Büyük dosyalar yüklüyorsunuz.
  • Ağ kesintisi veya başka bir iletim hatası olasılığı yüksek (örneğin, bir mobil uygulamadan dosya yüklüyorsanız).

Devam ettirilebilir yüklemeler, ağ üzerindeyken bant genişliği kullanımınızı da azaltabilir başarısız olur, çünkü büyük dosya yüklemelerini 3000'den fazla başlar.

1. Adım: Yükleme oturumu başlatma

https://photoslibrary.googleapis.com/v1/uploads adresine bir POST isteği göndererek devam ettirilebilir bir yükleme oturumu başlatın. Devam ettirilebilir yüklemeyi kullanma Bu istekte döndürülen URL, dosyayı yükleyin.

POST isteği aşağıdaki üstbilgileri içermelidir:

Başlık alanları
Content-Length İstek metni boş olduğundan 0 olarak ayarlanır.
X-Goog-Upload-Command start olarak ayarlayın.
X-Goog-Upload-Content-Type Dosyanın MIME türüne ayarlayın. Örneğin, image/jpeg
X-Goog-Upload-Protocol resumable olarak ayarlayın.
X-Goog-Upload-Raw-Size Aktarılacak dosya verilerinin toplam bayt sayısına ayarlanır.

Aşağıda bir POST isteği başlığı verilmiştir:

POST https://photoslibrary.googleapis.com/v1/uploads
Authorization: Bearer oauth2-token
Content-Length: 0
X-Goog-Upload-Command: start
X-Goog-Upload-Content-Type: mime-type
X-Goog-Upload-Protocol: resumable
X-Goog-Upload-Raw-Size: bytes-of-file

2. Adım: Oturum URL'sini kaydetme

Başarılı olursa POST isteği bir 200 OK HTTP durum kodu döndürür. başlık.

X-Goog-Upload-URL: url-to-make-uploads-to
X-Goog-Upload-Chunk-Granularity: chunk-granularity-in-bytes

x-goog-upload-chunk-granularity başlık alanı bayt hizalamasını içeriyor istemci tarafından gönderilen tüm veri parçalarının boyut ayrıntı düzeyini gösterir. Yükleme birden fazla parçada yapılıyorsa son yükleme hariç tüm yüklemeler bu değerin katları şeklinde yapılmalıdır. Yani dosyanın yükleme baytları bu değerle uyumlu olmalıdır. Son parçada, kalan bayt olarak kabul edilir.

X-Goog-Upload-URL başlık alanı, şunların yapılması için kullanılması gereken benzersiz bir URL içeriyor: ve kalan tüm istekler doğrultusunda yüklemeyi tamamlamalıdır. Bunu kopyalayıp kaydet devam ettirilebilir oturum URL'si oluşturun.

3. Adım: Dosyayı yükleme

Devam ettirilebilir bir oturumla dosya yüklemenin iki yolu vardır:

  1. Tek bir istekte. Bu genellikle en iyisi olan yaklaşımdır daha az istek gerektirdiği ve bu nedenle daha iyi performans gösterdiği için.
  2. Birden fazla parça halinde Bu yaklaşımda, yüklenen her video verileri topluca birleştirerek birden fazla istekte bulunabilirsiniz. Veriler, x-goog-upload-chunk-granularity'ün katları olacak şekilde parçalara ayrılır. Gerekirse parçalanan istekler yeniden denenebilir.

    Bu yaklaşımı aşağıdaki durumlarda kullanın:

    • Tek bir hesapta aktarılan veri miktarını azaltmanız isteği gönderin. Projeniz için sabit bir zaman sınırı varsa talep edebilir.
    • Yüklemeyi gösteren özelleştirilmiş bir gösterge sağlamanız gerekir takip edebilirsiniz.
    • Verileri silmenin ne zaman güvenli olduğunu bilmeniz gerekir.

Tekli İstek

Dosyayı tek bir istekte yüklemek için:

  1. Devam ettirilebilir oturum URL'sine bir POST isteği oluşturun.
  2. Dosyanın verilerini istek gövdesine ekleyin.
  3. Aşağıdaki HTTP üstbilgilerini ekleyin:

    • Content-Length: Veri kümesindeki bayt sayısına dosyası olarak kaydedebilirsiniz.
    • X-Goog-Upload-Command: upload, finalize olarak ayarlanır.
  4. İsteği gönderin.

Yükleme isteği kesintiye uğrarsa veya bir 5xx alırsanız devam etmek istiyorsanız Yükleme kesintiye uğradı.

İstek başarılı olursa 200 OK HTTP durumunu alırsınız kodu ile bir yükleme jetonu ekleyebilirsiniz. Oluştur medya öğesine gönderebilirsiniz.

Birden Çok Parça

Dosyayı birden fazla parça halinde yüklemek için:

  1. Devam ettirilebilir oturum URL'sine bir POST isteği oluşturun.
  2. Parçanın verilerini istek gövdesine ekleyin.

    Yüklemeyi tamamlayan son parça dışında, kabul edilen parça boyutunun katları şeklinde oluşturulduğundan emin olun. Şunu sakla: yığın boyutunu mümkün olduğunca büyük tutun.

  3. Aşağıdaki HTTP üstbilgilerini ekleyin:

    • Content-Length: Veri kümesindeki bayt sayısına emin olun.
    • X-Goog-Upload-Command: upload olarak ayarlandı. Son parça için upload, finalize olarak ayarlayın.
    • X-Goog-Upload-Offset: bayt yazılmalıdır. Baytların yüklenmesi gerektiğini unutmayın. var. İlk ofset 0.
  4. İsteği gönderin.

    Yükleme isteği kesintiye uğrarsa veya bir 5xx alırsanız devam etmek istiyorsanız Yükleme kesintiye uğradı.

  5. Dosyada kalan her parça için bu adımları tekrarlayın.

İstek başarılı olursa 200 OK HTTP durumunu alırsınız kodu ile bir yükleme jetonu ekleyebilirsiniz. Oluştur medya öğesine gönderebilirsiniz.

Örnek

Tekli İstek

Aşağıdaki örnekte 3.039.417 baytlık JPEG dosyası yükleyebilir.

POST https://photoslibrary.googleapis.com/v1/uploads HTTP/1.1
Content-Length: 0
X-Goog-Upload-Command: start
X-Goog-Upload-Content-Type: image/jpeg
X-Goog-Upload-Protocol: resumable
X-Goog-Upload-Raw-Size: 3039417
[no body]

Yanıt, yükleme URL'sini ve beklenen parça boyutunu içerir:

HTTP/1.1 200 OK
X-Goog-Upload-URL: https://photoslibrary.googleapis.com/v1/uploads?upload_id=AEnB2Urq&upload_protocol=resumable
X-Goog-Upload-Chunk-Granularity: 262144

Son yükleme isteği:

POST https://photoslibrary.googleapis.com/v1/uploads?upload_id=AEnB2Urq&upload_protocol=resumable HTTP/1.1
Content-Length: 3039417
X-Goog-Upload-Command: upload, finalize
X-Goog-Upload-Offset: 0

[BYTES 0-4199999]

Birden Çok Parça

Aşağıdaki örnekte Devam ettirilebilir oturumu kullanarak, birden çok parça halinde 3.039.417 baytlık JPEG dosyası URL ve önceki adımda elde edilen, kabul edilen parça boyutu ayrıntı düzeyi. Bu örnekte, yükleme oturumu başlatılırken x-goog-upload-chunk-granularity başlığında döndürülen 262.144 baytlık bir parça boyutu kullanılmaktadır. Her yüklemenin 262.144'ün katları olan baytlar içerdiğini unutmayın.

Yükleme URL'sini ve parça boyutunu almak için yükleme oturumunu başlatın adımları uygulayın:

POST https://photoslibrary.googleapis.com/v1/uploads HTTP/1.1
Content-Length: 0
X-Goog-Upload-Command: start
X-Goog-Upload-Content-Type: image/jpeg
X-Goog-Upload-Protocol: resumable
X-Goog-Upload-Raw-Size: 3039417
[no body]

Yanıt, yükleme URL'sini ve beklenen parça boyutunu içerir:

HTTP/1.1 200 OK
X-Goog-Upload-URL: https://photoslibrary.googleapis.com/v1/uploads?upload_id=AEnB2Urq&upload_protocol=resumable
X-Goog-Upload-Chunk-Granularity: 262144

İlk parça:

POST https://photoslibrary.googleapis.com/v1/uploads?upload_id=AEnB2Urq&upload_protocol=resumable HTTP/1.1
Content-Length: 1048576
X-Goog-Upload-Command: upload
X-Goog-Upload-Offset: 0

[BYTES 0-1048575]

İkinci yığın:

POST https://photoslibrary.googleapis.com/v1/uploads?upload_id=AEnB2Urq&upload_protocol=resumable HTTP/1.1
Content-Length: 1048576
X-Goog-Upload-Command: upload
X-Goog-Upload-Offset: 1048576

[BYTES 1048576-2097151]

Son parça:

POST https://photoslibrary.googleapis.com/v1/uploads?upload_id=AEnB2Urq&upload_protocol=resumable HTTP/1.1
Content-Length: 942265
X-Goog-Upload-Command: upload, finalize
X-Goog-Upload-Offset: 2097152

[BYTES 2097152-4200000]

Kesintiye uğrayan bir yüklemeyi devam ettirme

Yükleme isteği kesintiye uğrarsa veya 200 olmayan bir HTTP durumu alırsanız yüklemenin ne kadar başarılı olduğunu öğrenmek için sunucuya sorgu göndererek yüklemenin ne kadarının başarılı olduğunu öğrenin.

Devam ettirilebilir oturum URL'sine yapılan bir POST isteği. X-Goog-Upload-Command query olarak ayarlanmalıdır.

POST https://photoslibrary.googleapis.com/v1/uploads?upload_id=AEnB2Urq&upload_protocol=resumable HTTP/1.1
Content-Length: 0
X-Goog-Upload-Command: query

Sunucudan gelen yanıt, bir 200 OK HTTP durum kodu ve yüklemenin geçerli boyutunu korur.

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

Ardından, yüklemeyi bu uzaklıkta devam ettirebilirsiniz. Yükleme ve tamamlama komutunu birlikte göndermediğiniz sürece sunucu tarafından sağlanan ofset değerinden devam etmeniz gerekir. Bu durumda 0 ofsetinden de devam edebilirsiniz.

Sorgu komutunuzun HTTP yanıtındaki X-Goog-Upload-Status üstbilgisi var ve değer active değil. Bu, yükleme işleminin zaten feshedildi.