การอัปโหลดสื่อโดยตรงและทําต่อได้

เอกสารนี้อธิบายวิธีการใช้การอัปโหลดสื่อโดยตรงและกลับมาดําเนินการต่อกับไลบรารีของไคลเอ็นต์ Google API สําหรับ Java

การอัปโหลดสื่อที่ดําเนินการต่อได้

เมื่ออัปโหลดไฟล์สื่อขนาดใหญ่ไปยังเซิร์ฟเวอร์ ให้ใช้การอัปโหลดสื่อที่ดําเนินการต่อได้เพื่อส่งกลุ่มไฟล์ทีละส่วน ไลบรารีที่สร้างขึ้นด้วย Google API ประกอบด้วยวิธีที่สะดวกในการโต้ตอบกับการอัปโหลดสื่อที่ดําเนินการต่อได้

โปรโตคอลการอัปโหลดสื่อที่ดําเนินการต่อได้คล้ายคลึงกับโปรโตคอลการอัปโหลดสื่อที่ดําเนินการต่อได้ตามที่อธิบายไว้ในเอกสารประกอบของ Google ไดรฟ์ API

การออกแบบโปรโตคอล

แผนภาพลําดับต่อไปนี้แสดงวิธีการทํางานของโปรโตคอลการอัปโหลดสื่อที่ดําเนินการต่อได้
แผนภาพลําดับแสดงวิธีย้ายคําขอและการตอบกลับระหว่างไคลเอ็นต์และเซิร์ฟเวอร์

รายละเอียดการใช้งาน

คลาสหลักๆ ที่สนใจคือ MediaHttpUploader และ MediaHttpProgressListener

หากเมธอดในไลบรารีที่สร้างโดยบริการเฉพาะมีพารามิเตอร์ mediaUpload ในเอกสารการค้นพบ ระบบจะสร้างเมธอดอํานวยความสะดวกสําหรับวิธีการเหล่านี้ที่ใช้ InputStreamContent เป็นพารามิเตอร์ (ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้การอัปโหลดสื่อด้วยบริการ Google APIs Discovery Service ได้ที่การอัปโหลดสื่อ)

เช่น เมธอด insert ของ Drive API จะรองรับ mediaUpload และคุณสามารถใช้โค้ดต่อไปนี้เพื่ออัปโหลดไฟล์ได้

class CustomProgressListener implements MediaHttpUploaderProgressListener {
  public void progressChanged(MediaHttpUploader uploader) throws IOException {
    switch (uploader.getUploadState()) {
      case INITIATION_STARTED:
        System.out.println("Initiation has started!");
        break;
      case INITIATION_COMPLETE:
        System.out.println("Initiation is complete!");
        break;
      case MEDIA_IN_PROGRESS:
        System.out.println(uploader.getProgress());
        break;
      case MEDIA_COMPLETE:
        System.out.println("Upload is complete!");
    }
  }
}

File mediaFile = new File("/tmp/driveFile.jpg");
InputStreamContent mediaContent =
    new InputStreamContent("image/jpeg",
        new BufferedInputStream(new FileInputStream(mediaFile)));
mediaContent.setLength(mediaFile.length());

Drive.Files.Insert request = drive.files().insert(fileMetadata, mediaContent);
request.getMediaHttpUploader().setProgressListener(new CustomProgressListener());
request.execute();

นอกจากนี้ คุณยังใช้ฟีเจอร์อัปโหลดสื่อที่ดําเนินการต่อได้โดยไม่ต้องมีไลบรารีที่สร้างขึ้นเฉพาะบริการ ตัวอย่าง

File mediaFile = new File("/tmp/Test.jpg");
InputStreamContent mediaContent =
    new InputStreamContent("image/jpeg",
        new BufferedInputStream(new FileInputStream(mediaFile)));
mediaContent.setLength(mediaFile.length());

MediaHttpUploader uploader = new MediaHttpUploader(mediaContent, transport, httpRequestInitializer); uploader.setProgressListener(new CustomProgressListener()); HttpResponse response = uploader.upload(requestUrl); if (!response.isSuccessStatusCode()) { throw GoogleJsonResponseException(jsonFactory, response); }

การอัปโหลดสื่อโดยตรง

การอัปโหลดสื่อที่ดําเนินการต่อได้จะเปิดอยู่โดยค่าเริ่มต้น แต่คุณปิดใช้และใช้การอัปโหลดสื่อโดยตรงแทนได้ เช่น ในกรณีที่อัปโหลดไฟล์ขนาดเล็ก มีการอัปโหลดสื่อโดยตรงในไลบรารีของไคลเอ็นต์ Google API เวอร์ชัน 1.9.0-เบต้า สําหรับ Java

การอัปโหลดสื่อโดยตรงจะอัปโหลดไฟล์ทั้งหมดในคําขอ HTTP รายการเดียว ซึ่งตรงข้ามกับโปรโตคอลการอัปโหลดสื่อที่ดําเนินการต่อได้ ซึ่งจะอัปโหลดไฟล์ในคําขอหลายรายการ การอัปโหลดโดยตรงจะช่วยลดจํานวนคําขอ HTTP แต่จะทําให้มีโอกาสเกิดความล้มเหลวมากขึ้น (เช่น ความล้มเหลวในการเชื่อมต่อ) ที่อาจเกิดขึ้นกับการอัปโหลดขนาดใหญ่

การใช้งานสําหรับการอัปโหลดสื่อโดยตรงจะเหมือนกับที่อธิบายไว้ข้างต้นสําหรับการอัปโหลดสื่อที่ดําเนินการต่อ บวกกับการเรียกที่บอก MediaHttpUploader ให้อัปโหลดโดยตรงเท่านั้น

mediaHttpUploader.setDirectUploadEnabled(true);