মিডিয়া আপলোড করুন

মিডিয়া আইটেম আপলোড একটি দ্বি-পদক্ষেপ প্রক্রিয়া:

  1. আপলোড এন্ডপয়েন্ট ব্যবহার করে একটি Google সার্ভারে আপনার মিডিয়া ফাইলের বাইট আপলোড করুন। এটি একটি আপলোড টোকেন প্রদান করে যা আপলোড করা বাইট সনাক্ত করে।
  2. ব্যবহারকারীর Google ফটো অ্যাকাউন্টে একটি মিডিয়া আইটেম তৈরি করতে আপলোড টোকেন সহ একটি ব্যাচক্রিট কল ব্যবহার করুন৷

এই পদক্ষেপগুলি একটি একক মিডিয়া আইটেম আপলোড করার প্রক্রিয়ার রূপরেখা দেয়৷ আপনি যদি একাধিক মিডিয়া আইটেম আপলোড করে থাকেন (খুব সম্ভব যেকোন প্রোডাকশন অ্যাপ্লিকেশনের জন্য), আপনার আপলোড দক্ষতা উন্নত করার জন্য আপলোডগুলির জন্য সেরা অনুশীলনগুলি পর্যালোচনা করুন৷

আপনি শুরু করার আগে

প্রয়োজনীয় অনুমোদনের সুযোগ

কোনো ব্যবহারকারীর লাইব্রেরি বা অ্যালবামে মিডিয়া আইটেম আপলোড করার জন্য হয় photoslibrary.appendonly বা photoslibrary সুযোগ প্রয়োজন।

photoslibrary.sharing স্কোপ ব্যবহার করে মিডিয়া আইটেমগুলিও তৈরি করা যেতে পারে। photoslibrary.sharing স্কোপের সাথে আইটেম তৈরি করতে, আপনাকে প্রথমে একটি অ্যালবাম তৈরি করতে হবে এবং shareAlbum ব্যবহার করে শেয়ার করা হিসাবে চিহ্নিত করতে হবে। তারপরে আপনি মিডিয়া আইটেমগুলি তৈরি করতে পারেন যা অ্যালবামে ব্যবহারকারীর সাথে ভাগ করা হয়৷ আপনি সরাসরি ব্যবহারকারীর লাইব্রেরিতে বা আপনার অ্যাপ শেয়ার করেনি এমন অ্যালবামে আইটেম তৈরি করতে পারবেন না।

অ্যালবামগুলি তালিকাভুক্ত করার সময়, isWriteable প্রপার্টি নির্দেশ করে যে আপনার অ্যাপ্লিকেশন একটি নির্দিষ্ট অ্যালবামে মিডিয়া তৈরি করার অ্যাক্সেস আছে কিনা।

স্বীকৃত ফাইলের ধরন এবং আকার

আপনি নীচের টেবিলে তালিকাভুক্ত ফাইল প্রকারগুলি আপলোড করতে পারেন৷

মিডিয়া টাইপ স্বীকৃত ফাইল প্রকার সর্বোচ্চ ফাইলের আকার
ফটো AVIF, BMP, GIF, HEIC, ICO, JPG, PNG, TIFF, WEBP, কিছু RAW ফাইল। 200 এমবি
ভিডিও 3GP, 3G2, ASF, AVI, DIVX, M2T, M2TS, M4V, MKV, MMV, MOD, MOV, MP4, MPG, MTS, TOD, WMV। 20 জিবি

ধাপ 1: বাইট আপলোড করা হচ্ছে

আপলোড অনুরোধ ব্যবহার করে Google এ বাইট আপলোড করুন। একটি সফল আপলোড অনুরোধ একটি কাঁচা পাঠ্য স্ট্রিং আকারে একটি আপলোড টোকেন প্রদান করে৷ batchCreate কলের মাধ্যমে মিডিয়া আইটেম তৈরি করতে এই আপলোড টোকেনগুলি ব্যবহার করুন৷

বিশ্রাম

POST অনুরোধ শিরোনামে নিম্নলিখিত ক্ষেত্রগুলি অন্তর্ভুক্ত করুন:

হেডার ক্ষেত্র
Content-type application/octet-stream সেট করুন।
X-Goog-Upload-Content-Type প্রস্তাবিত. আপনি যে বাইটগুলি আপলোড করছেন তার MIME প্রকারে সেট করুন৷ সাধারণ MIME প্রকারের মধ্যে রয়েছে image/jpeg , image/png , এবং image/gif
X-Goog-Upload-Protocol raw সেট করুন।

এখানে একটি POST অনুরোধ শিরোনাম আছে:

POST https://photoslibrary.googleapis.com/v1/uploads
Authorization: Bearer oauth2-token
Content-type: application/octet-stream
X-Goog-Upload-Content-Type: mime-type
X-Goog-Upload-Protocol: raw

অনুরোধের অংশে, ফাইলের বাইনারি অন্তর্ভুক্ত করুন:

media-binary-data

এই POST অনুরোধটি সফল হলে, একটি আপলোড টোকেন যা একটি কাঁচা পাঠ্য স্ট্রিং আকারে, প্রতিক্রিয়া বডি হিসাবে ফেরত দেওয়া হয়৷ মিডিয়া আইটেম তৈরি করতে, batchCreate কলে এই পাঠ্য স্ট্রিংগুলি ব্যবহার করুন।

upload-token

জাভা

// Open the file and automatically close it after upload
try (RandomAccessFile file = new RandomAccessFile(pathToFile, "r")) {
  // Create a new upload request
  UploadMediaItemRequest uploadRequest =
      UploadMediaItemRequest.newBuilder()
              // The media type (e.g. "image/png")
              .setMimeType(mimeType)
              // The file to upload
              .setDataFile(file)
          .build();
  // Upload and capture the response
  UploadMediaItemResponse uploadResponse = photosLibraryClient.uploadMediaItem(uploadRequest);
  if (uploadResponse.getError().isPresent()) {
    // If the upload results in an error, handle it
    Error error = uploadResponse.getError().get();
  } else {
    // If the upload is successful, get the uploadToken
    String uploadToken = uploadResponse.getUploadToken().get();
    // Use this upload token to create a media item
  }
} catch (ApiException e) {
  // Handle error
} catch (IOException e) {
  // Error accessing the local file
}

পিএইচপি

try {
    // Create a new upload request by opening the file
    // and specifying the media type (e.g. "image/png")
    $uploadToken = $photosLibraryClient->upload(file_get_contents($localFilePath), null, $mimeType);
} catch (\GuzzleHttp\Exception\GuzzleException $e) {
    // Handle error
}

ছবির জন্য প্রস্তাবিত ফাইলের আকার 50 MB এর কম। 50 MB এর বেশি ফাইলগুলি কর্মক্ষমতা সংক্রান্ত সমস্যাগুলির জন্য প্রবণ৷

Google ফটো লাইব্রেরি API পুনরায় শুরু করা আপলোড সমর্থন করে। একটি পুনঃসূচনাযোগ্য আপলোড আপনাকে একটি মিডিয়া ফাইলকে একাধিক বিভাগে বিভক্ত করতে এবং একবারে একটি বিভাগ আপলোড করতে দেয়৷

ধাপ 2: একটি মিডিয়া আইটেম তৈরি করা

আপনার মিডিয়া ফাইলগুলির বাইট আপলোড করার পরে, আপনি আপলোড টোকেন ব্যবহার করে Google ফটোতে মিডিয়া আইটেম হিসাবে তৈরি করতে পারেন৷ একটি আপলোড টোকেন তৈরি হওয়ার পর এক দিনের জন্য বৈধ। একটি মিডিয়া আইটেম সর্বদা ব্যবহারকারীর লাইব্রেরিতে যোগ করা হয়। মিডিয়া আইটেমগুলি শুধুমাত্র আপনার অ্যাপ দ্বারা তৈরি অ্যালবামে যোগ করা যেতে পারে। আরও তথ্যের জন্য, অনুমোদনের সুযোগগুলি দেখুন।

নতুন মিডিয়া আইটেম তৈরি করতে, newMediaItems এর একটি তালিকা নির্দিষ্ট করে mediaItems.batchCreate কল করুন। প্রতিটি newMediaItem একটি আপলোড টোকেন থাকে যা একটি simpleMediaItem ভিতরে নির্দিষ্ট করা থাকে, এবং একটি ঐচ্ছিক বিবরণ যা ব্যবহারকারীকে দেখানো হয়৷

বর্ণনা ক্ষেত্রটি 1000 অক্ষরের মধ্যে সীমাবদ্ধ এবং শুধুমাত্র ব্যবহারকারীদের দ্বারা তৈরি অর্থপূর্ণ পাঠ্য অন্তর্ভুক্ত করা উচিত। উদাহরণস্বরূপ, " আমাদের পার্কে ট্রিপ " বা " হলিডে ডিনার "। ফাইলের নাম, প্রোগ্রাম্যাটিক ট্যাগ বা অন্যান্য স্বয়ংক্রিয়ভাবে তৈরি করা পাঠ্যের মতো মেটাডেটা অন্তর্ভুক্ত করবেন না।

সেরা পারফরম্যান্সের জন্য, একটি কলে একাধিক মিডিয়া আইটেম অন্তর্ভুক্ত করে mediaItems.batchCreate এ কলের সংখ্যা কমিয়ে দিন। একই ব্যবহারকারীর জন্য পরবর্তী কল করার আগে পূর্ববর্তী অনুরোধটি সম্পূর্ণ না হওয়া পর্যন্ত সর্বদা অপেক্ষা করুন।

আপনি বর্ণনা এবং সংশ্লিষ্ট আপলোড টোকেনগুলি নির্দিষ্ট করে ব্যবহারকারীর লাইব্রেরিতে একটি একক মিডিয়া আইটেম বা একাধিক মিডিয়া আইটেম তৈরি করতে পারেন:

বিশ্রাম

এখানে পোস্ট অনুরোধ শিরোনাম আছে:

POST https://photoslibrary.googleapis.com/v1/mediaItems:batchCreate
Content-type: application/json
Authorization: Bearer oauth2-token

অনুরোধের বডিকে newMediaItems একটি তালিকা উল্লেখ করা উচিত।

{
  "newMediaItems": [
    {
      "description": "item-description",
      "simpleMediaItem": {
        "fileName": "filename",
        "uploadToken": "upload-token"
      }
    }
   , ...
  ]
}

জাভা

try {
  // Create a NewMediaItem with the following components:
  // - uploadToken obtained from the previous upload request
  // - filename that will be shown to the user in Google Photos
  // - description that will be shown to the user in Google Photos
  NewMediaItem newMediaItem = NewMediaItemFactory
          .createNewMediaItem(uploadToken, fileName, itemDescription);
  List<NewMediaItem> newItems = Arrays.asList(newMediaItem);

  BatchCreateMediaItemsResponse response = photosLibraryClient.batchCreateMediaItems(newItems);
  for (NewMediaItemResult itemsResponse : response.getNewMediaItemResultsList()) {
    Status status = itemsResponse.getStatus();
    if (status.getCode() == Code.OK_VALUE) {
      // The item is successfully created in the user's library
      MediaItem createdItem = itemsResponse.getMediaItem();
    } else {
      // The item could not be created. Check the status and try again
    }
  }
} catch (ApiException e) {
  // Handle error
}

পিএইচপি

try {
    $newMediaItems = [];
    // Create a NewMediaItem with the following components:
    // - uploadToken obtained from the previous upload request
    // - filename that will be shown to the user in Google Photos
    // - description that will be shown to the user in Google Photos
    $newMediaItems[0] = PhotosLibraryResourceFactory::newMediaItemWithDescriptionAndFileName(
            $uploadToken, $itemDescription, $fileName);

    $response = $photosLibraryClient->batchCreateMediaItems($newMediaItems);
    foreach ($response->getNewMediaItemResults() as $itemResult) {
        $status = $itemResult->getStatus();
        if ($status->getCode() != Code::OK) {
            // Error while creating the item.
        }
    }
} catch (\Google\ApiCore\ApiException $e) {
    // Handle error
}

আপনি অ্যালবাম id নির্দিষ্ট করে লাইব্রেরিতে এবং একটি অ্যালবামে মিডিয়া আইটেম যোগ করতে পারেন। আরও তথ্যের জন্য, অ্যালবাম তৈরি করুন দেখুন।

প্রতিটি অ্যালবামে 20,000টি মিডিয়া আইটেম থাকতে পারে। এই সীমা অতিক্রম করবে এমন একটি অ্যালবামে মিডিয়া আইটেম তৈরি করার অনুরোধ ব্যর্থ হবে৷

বিশ্রাম

{
  "albumId": "album-id",
  "newMediaItems": [
    {
      "description": "item-description",
      "simpleMediaItem": {
        "fileName": "filename",
        "uploadToken": "upload-token"
      }
    }
   , ...
  ]
}

জাভা

try {
  // Create new media items in a specific album
  BatchCreateMediaItemsResponse response = photosLibraryClient
      .batchCreateMediaItems(albumId, newItems);
  // Check the response
} catch (ApiException e) {
  // Handle error
}

পিএইচপি

try {
    $response = $photosLibraryClient->batchCreateMediaItems($newMediaItems, ['albumId' => $albumId]);
} catch (\Google\ApiCore\ApiException $e) {
    // Handle error
}

আপনি অ্যালবামের একটি নির্দিষ্ট স্থানে মিডিয়া আইটেম সন্নিবেশ করার জন্য albumId এবং albumPosition নির্দিষ্ট করতে পারেন।

বিশ্রাম

{
  "albumId": "album-id",
  "newMediaItems": [
    {
      "description": "item-description",
      "simpleMediaItem": {
        "fileName": "filename",
        "uploadToken": "upload-token"
      }
    }
    , ...
  ],
  "albumPosition": {
    "position": "after-media-item",
    "relativeMediaItemId": "media-item-id"
  }
}

জাভা

try {
  // Create new media items in a specific album, positioned after a media item
  AlbumPosition positionInAlbum = AlbumPositionFactory.createFirstInAlbum();
  BatchCreateMediaItemsResponse response = photosLibraryClient
      .batchCreateMediaItems(albumId, newItems, positionInAlbum);
  // Check the response
} catch (ApiException e) {
  // Handle error
}

পিএইচপি

try {
    $albumPosition = PhotosLibraryResourceFactory::albumPositionAfterMediaItem($mediaItemId);
    $response = $photosLibraryClient->batchCreateMediaItems($newMediaItems,
        ['albumId' => $albumId, 'albumPosition' => $albumPosition]);
} catch (\Google\ApiCore\ApiException $e) {
    // Handle error
}

অ্যালবামগুলিতে অবস্থান সম্পর্কিত আরও বিশদ বিবরণের জন্য, সমৃদ্ধকরণ যুক্ত করুন দেখুন।

আইটেম তৈরি প্রতিক্রিয়া

mediaItems.batchCreate কল আপনার তৈরি করার চেষ্টা করা প্রতিটি মিডিয়া আইটেমের ফলাফল প্রদান করে। newMediaItemResults তালিকা স্থিতি নির্দেশ করে এবং অনুরোধের জন্য uploadToken অন্তর্ভুক্ত করে। একটি নন-জিরো স্ট্যাটাস কোড একটি ত্রুটি নির্দেশ করে।

বিশ্রাম

যদি সমস্ত মিডিয়া আইটেম সফলভাবে তৈরি করা হয়, অনুরোধটি HTTP স্থিতি 200 OK প্রদান করে। যদি কিছু মিডিয়া আইটেম তৈরি করা না যায়, আংশিক সাফল্য নির্দেশ করতে অনুরোধটি HTTP স্থিতি 207 MULTI-STATUS প্রদান করে।

{
  "newMediaItemResults": [
    {
      "uploadToken": "upload-token",
      "status": {
        "message": "Success"
      },
      "mediaItem": {
        "id": "media-item-id",
        "description": "item-description",
        "productUrl": "https://photos.google.com/photo/photo-path",
        "mimeType": "mime-type",
        "mediaMetadata": {
          "width": "media-width-in-px",
          "height": "media-height-in-px",
          "creationTime": "creation-time",
          "photo": {}
        },
        "filename": "filename"
      }
    },
    {
      "uploadToken": "upload-token",
      "status": {
        "code": 13,
        "message": "Internal error"
      }
    }
  ]
}

জাভা

BatchCreateMediaItemsResponse response = photosLibraryClient.batchCreateMediaItems(newItems);

// The response contains a list of NewMediaItemResults
for (NewMediaItemResult result : response.getNewMediaItemResultsList()) {
  // Each result item is identified by its uploadToken
  String uploadToken = result.getUploadToken();
  Status status = result.getStatus();

  if (status.getCode() == Code.OK_VALUE) {
    // If the request is successful, a MediaItem is returned
    MediaItem mediaItem = result.getMediaItem();
    String id = mediaItem.getId();
    String productUrl = mediaItem.getProductUrl();
    // ...
  }
}

পিএইচপি

// The response from a call to batchCreateMediaItems returns a list of NewMediaItemResults
foreach ($response->getNewMediaItemResults() as $itemResult) {
    // Each result item is identified by its uploadToken
    $itemUploadToken = $itemResult->getUploadToken();
    // Verify the status of each entry to ensure that the item has been uploaded correctly
    $itemStatus = $itemResult->getStatus();
    if ($itemStatus->getCode() != Code::OK) {
        // Error when item is being created
    } else {
        // Media item is successfully created
        // Get the MediaItem object from the response
        $mediaItem = $itemResult->getMediaItem();
        // It contains details such as the Id of the item, productUrl
        $id = $mediaItem->getId();
        $productUrl = $mediaItem->getProductUrl();
        // ...
    }
}

যদি একটি আইটেম সফলভাবে যোগ করা হয়, একটি mediaItem ফেরত দেওয়া হয় যাতে এর mediaItemId , productUrl এবং mediaMetadata থাকে। আরও তথ্যের জন্য, মিডিয়া আইটেম অ্যাক্সেস দেখুন।

মিডিয়া আইটেম একটি ভিডিও হলে, এটি প্রথমে প্রক্রিয়া করা আবশ্যক। mediaItem mediaMetadata ভিতরে একটি status রয়েছে যা ভিডিও ফাইলের প্রক্রিয়াকরণের অবস্থা বর্ণনা করে। একটি নতুন আপলোড করা ফাইল ব্যবহারের জন্য READY হওয়ার আগে প্রথমে PROCESSING স্ট্যাটাস প্রদান করে৷ বিস্তারিত জানার জন্য, মিডিয়া আইটেম অ্যাক্সেস দেখুন।

এই কলের সময় আপনি যদি কোনো ত্রুটির সম্মুখীন হন, সেরা অনুশীলনগুলি অনুসরণ করুন এবং আপনার অনুরোধটি আবার চেষ্টা করুন৷ আপনি সফল সংযোজনের ট্র্যাক রাখতে চাইতে পারেন, তাই পরবর্তী অনুরোধের সময় সঠিক অবস্থানে ছবিটি অ্যালবামে ঢোকানো যেতে পারে। আরও তথ্যের জন্য, অ্যালবাম তৈরি করুন দেখুন।

ফলাফলগুলি সর্বদা একই ক্রমে ফেরত দেওয়া হয় যেখানে আপলোড টোকেনগুলি জমা দেওয়া হয়েছিল৷

আপলোডের জন্য সর্বোত্তম অনুশীলন

নিম্নলিখিত সর্বোত্তম অনুশীলন এবং সংস্থানগুলি আপলোডগুলির সাথে আপনার সামগ্রিক দক্ষতা উন্নত করতে সহায়তা করে:

  • আমাদের সমর্থিত ক্লায়েন্ট লাইব্রেরিগুলির একটি ব্যবহার করুন৷
  • নিম্নলিখিত বিষয়গুলি মাথায় রেখে পুনরায় চেষ্টা এবং ত্রুটি পরিচালনার সর্বোত্তম অনুশীলনগুলি অনুসরণ করুন:
    • 429 ত্রুটি ঘটতে পারে যখন আপনার কোটা শেষ হয়ে গেছে বা আপনি খুব দ্রুত অনেক কল করার জন্য রেট সীমিত। নিশ্চিত করুন যে আপনি আগের অনুরোধটি সম্পূর্ণ না হওয়া পর্যন্ত একই ব্যবহারকারীর জন্য batchCreate কল করবেন না।
    • 429 ত্রুটির জন্য পুনরায় চেষ্টা করার আগে ন্যূনতম 30s বিলম্ব প্রয়োজন। অনুরোধ পুনরায় চেষ্টা করার সময় একটি সূচকীয় ব্যাকঅফ কৌশল ব্যবহার করুন।
    • 500 ত্রুটি ঘটে যখন সার্ভার একটি ত্রুটির সম্মুখীন হয়। আপলোড করার সময়, একই ব্যবহারকারীর জন্য একই সময়ে একাধিক রাইট কল (যেমন batchCreate ) করার কারণে এটি সম্ভবত। আপনার অনুরোধের বিশদ বিবরণ পরীক্ষা করুন এবং সমান্তরালভাবে batchCreate এ কল করবেন না।
  • নেটওয়ার্ক বাধার ক্ষেত্রে আপনার আপলোডগুলিকে আরও শক্তিশালী করতে পুনরায় শুরুযোগ্য আপলোড প্রবাহ ব্যবহার করুন, আপনাকে আংশিকভাবে সম্পূর্ণ আপলোডগুলি পুনরায় শুরু করার অনুমতি দিয়ে ব্যান্ডউইথের ব্যবহার হ্রাস করুন৷ ক্লায়েন্ট মোবাইল ডিভাইস থেকে আপলোড করার সময় বা বড় ফাইল আপলোড করার সময় এটি গুরুত্বপূর্ণ।

পাশাপাশি, আপলোড প্রক্রিয়ার প্রতিটি ধাপের জন্য নিম্নলিখিত টিপস বিবেচনা করুন: বাইট আপলোড করা এবং তারপর মিডিয়া আইটেম তৈরি করা

বাইট আপলোড করা হচ্ছে

  • বাইট আপলোড করা (আপলোড টোকেন পুনরুদ্ধার করতে) সমান্তরালভাবে করা যেতে পারে।
  • প্রতিটি আপলোড কলের জন্য X-Goog-Upload-Content-Type হেডারে সর্বদা সঠিক MIME প্রকার সেট করুন৷

মিডিয়া আইটেম তৈরি করা

  • একক ব্যবহারকারীর জন্য batchCreate সমান্তরালে কল করবেন না।

    • প্রতিটি ব্যবহারকারীর জন্য, একের পর এক batchCreate কল করুন (ক্রমিকভাবে)।
    • একাধিক ব্যবহারকারীর জন্য, সর্বদা প্রতিটি ব্যবহারকারীর জন্য একের পর এক batchCreate কল করুন। শুধুমাত্র সমান্তরালভাবে বিভিন্ন ব্যবহারকারীদের জন্য কল করুন।
  • প্রতিটি কলে যতটা সম্ভব NewMediaItems অন্তর্ভুক্ত batchCreate যাতে আপনাকে কলের মোট সংখ্যা কমাতে হয়। সর্বাধিক আপনি 50টি আইটেম অন্তর্ভুক্ত করতে পারেন।

  • একটি অর্থপূর্ণ বর্ণনা পাঠ্য সেট করুন যা আপনার ব্যবহারকারীদের দ্বারা তৈরি করা হয়েছে। বর্ণনা ক্ষেত্রে ফাইলের নাম, প্রোগ্রাম্যাটিক ট্যাগ বা অন্যান্য স্বয়ংক্রিয়ভাবে তৈরি করা পাঠ্যের মতো মেটাডেটা অন্তর্ভুক্ত করবেন না।

উদাহরণ ওয়াকথ্রু

এই উদাহরণটি একাধিক ব্যবহারকারীর জন্য মিডিয়া আইটেম আপলোড করার জন্য সিউডোকোড ব্যবহার করে। লক্ষ্য হল আপলোড প্রক্রিয়ার উভয় ধাপের রূপরেখা ( কাঁচা বাইট আপলোড করা এবং মিডিয়া আইটেম তৈরি করা ) এবং একটি দক্ষ এবং স্থিতিস্থাপক আপলোড ইন্টিগ্রেশন তৈরির জন্য সর্বোত্তম অনুশীলনের বিশদ বিবরণ।

ধাপ 1: কাঁচা বাইট আপলোড করুন

প্রথমে আপনার সমস্ত ব্যবহারকারীদের থেকে আপনার মিডিয়া আইটেমগুলির জন্য কাঁচা বাইট আপলোড করার জন্য একটি সারি তৈরি করুন৷ ব্যবহারকারী প্রতি প্রতিটি ফেরত uploadToken ট্র্যাক করুন। এই মূল পয়েন্ট মনে রাখবেন:

  • একযোগে আপলোড থ্রেডের সংখ্যা আপনার অপারেটিং পরিবেশের উপর নির্ভর করে।
  • প্রয়োজন অনুযায়ী আপলোড সারি পুনর্বিন্যাস বিবেচনা করুন. উদাহরণস্বরূপ, আপনি প্রতি ব্যবহারকারীর অবশিষ্ট আপলোডের সংখ্যা, ব্যবহারকারীর সামগ্রিক অগ্রগতি বা অন্যান্য প্রয়োজনীয়তার উপর ভিত্তি করে আপলোডগুলিকে অগ্রাধিকার দিতে পারেন৷

সিউডোকোড

CREATE uploadQueue FROM users, filesToUpload
// Upload media bytes in parallel.
START multiple THREADS
  WHILE uploadQueue is not empty
    POP uploadQueue
    UPLOAD file for user
    GET uploadToken
    CHECK and HANDLE errors
    STORE uploadToken for user in uploadTokensQueue
  END

ধাপ 2: মিডিয়া আইটেম তৈরি করুন

ধাপ 1-এ, আপনি সমান্তরালভাবে একাধিক ব্যবহারকারীর থেকে একাধিক বাইট আপলোড করতে পারেন, কিন্তু ধাপ 2-এ আপনি প্রতিটি ব্যবহারকারীর জন্য একবারে একটি মাত্র কল করতে পারবেন।

সিউডোকোড

// For each user, create media items once 50 upload tokens have been
// saved, or no more uploads are left per user.
WHEN uploadTokensQueue for user is >= 50 OR no more pending uploads for user
  // Calls can be made in parallel for different users,
  // but only make a single call per user at a time.
  START new thread for (this) user if there is no thread yet
    POP 50 uploadTokens from uploadTokensQueue for user
    CALL mediaItems.batchCreate with uploadTokens
    WAIT UNTIL batchCreate call has completed
    CHECK and HANDLE errors (retry as needed)
  DONE.

সমস্ত আপলোড এবং মিডিয়া তৈরি কল সম্পূর্ণ না হওয়া পর্যন্ত এই প্রক্রিয়াটি চালিয়ে যান।