จัดการไดรฟ์ที่แชร์

คู่มือนี้มีงานที่เกี่ยวข้องกับการจัดการไดรฟ์ที่แชร์ เช่น การสร้างไดรฟ์ที่แชร์และการจัดการสมาชิกและสิทธิ์โดยใช้ Google Drive API

ดูข้อมูลเพิ่มเติมเกี่ยวกับขีดจำกัดของโฟลเดอร์ในไดรฟ์ที่แชร์ได้ที่ขีดจำกัดของโฟลเดอร์

สร้างไดรฟ์ที่แชร์

หากต้องการสร้างไดรฟ์ที่แชร์ ให้ใช้วิธี drives.create

Java

drive/snippets/drive_v3/src/main/java/CreateDrive.java
import com.google.api.client.googleapis.json.GoogleJsonResponseException;
import com.google.api.client.http.HttpRequestInitializer;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.drive.DriveScopes;
import com.google.api.services.drive.model.Drive;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.IOException;
import java.util.Arrays;
import java.util.UUID;

/* class to demonstrate use-case of Drive's create drive. */
public class CreateDrive {

  /**
   * Create a drive.
   *
   * @return Newly created drive id.
   * @throws IOException if service account credentials file not found.
   */
  public static String createDrive() throws IOException {
        /*Load pre-authorized user credentials from the environment.
        TODO(developer) - See https://developers.google.com/identity for
        guides on implementing OAuth2 for your application.*/
    GoogleCredentials credentials =
        GoogleCredentials.getApplicationDefault().createScoped(Arrays.asList(DriveScopes.DRIVE));
    HttpRequestInitializer requestInitializer = new HttpCredentialsAdapter(
        credentials);

    // Build a new authorized API client service.
    com.google.api.services.drive.Drive service =
        new com.google.api.services.drive.Drive.Builder(new NetHttpTransport(),
            GsonFactory.getDefaultInstance(),
            requestInitializer)
            .setApplicationName("Drive samples")
            .build();

    Drive driveMetadata = new Drive();
    driveMetadata.setName("Project Resources");
    String requestId = UUID.randomUUID().toString();
    try {
      Drive drive = service.drives().create(requestId,
              driveMetadata)
          .execute();
      System.out.println("Drive ID: " + drive.getId());

      return drive.getId();
    } catch (GoogleJsonResponseException e) {
      // TODO(developer) - handle error appropriately
      System.err.println("Unable to create drive: " + e.getDetails());
      throw e;
    }
  }
}

Python

drive/snippets/drive-v3/drive_snippet/create_drive.py
import uuid

import google.auth
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError


def create_drive():
  """Create a drive.
  Returns:
      Id of the created drive

  Load pre-authorized user credentials from the environment.
  TODO(developer) - See https://developers.google.com/identity
  for guides on implementing OAuth2 for the application.
  """
  creds, _ = google.auth.default()

  try:
    # create drive api client
    service = build("drive", "v3", credentials=creds)

    drive_metadata = {"name": "Project Resources"}
    request_id = str(uuid.uuid4())
    # pylint: disable=maybe-no-member
    drive = (
        service.drives()
        .create(body=drive_metadata, requestId=request_id, fields="id")
        .execute()
    )
    print(f'Drive ID: {drive.get("id")}')

  except HttpError as error:
    print(f"An error occurred: {error}")
    drive = None

  return drive.get("id")


if __name__ == "__main__":
  create_drive()

Node.js

drive/snippets/drive_v3/drive_snippets/create_drive.js
/**
 * Create a drive.
 * */
async function createDrive() {
  // Get credentials and build service
  // TODO (developer) - Use appropriate auth mechanism for your app

  const {GoogleAuth} = require('google-auth-library');
  const {google} = require('googleapis');
  const uuid = require('uuid');

  const auth = new GoogleAuth({
    scopes: 'https://www.googleapis.com/auth/drive',
  });
  const service = google.drive({version: 'v3', auth});

  const driveMetadata = {
    name: 'Project resources',
  };
  const requestId = uuid.v4();
  try {
    const Drive = await service.drives.create({
      resource: driveMetadata,
      requestId: requestId,
      fields: 'id',
    });
    console.log('Drive Id:', Drive.data.id);
    return Drive.data.id;
  } catch (err) {
    // TODO(developer) - Handle error
    throw err;
  }
}

PHP

drive/snippets/drive_v3/src/DriveCreateDrive.php
use Google\Client;
use Google\Service\Drive;
use Ramsey\Uuid\Uuid;
function createDrive()
{
    try {
        $client = new Client();
        $client->useApplicationDefaultCredentials();
        $client->addScope(Drive::DRIVE);
        $driveService = new Drive($client);

        $driveMetadata = new Drive\Drive(array(
                'name' => 'Project Resources'));
        $requestId = Uuid::uuid4()->toString();
        $drive = $driveService->drives->create($requestId, $driveMetadata, array(
                'fields' => 'id'));
        printf("Drive ID: %s\n", $drive->id);
        return $drive->id;
    } catch(Exception $e)  {
        echo "Error Message: ".$e;
    }  

}

.NET

drive/snippets/drive_v3/DriveV3Snippets/CreateDrive.cs
using Google.Apis.Auth.OAuth2;
using Google.Apis.Drive.v3;
using Google.Apis.Drive.v3.Data;
using Google.Apis.Services;

namespace DriveV3Snippets
{
    // Class to demonstrate use of Drive's create drive.
    public class CreateDrive
    {
        /// <summary>
        /// Create a drive.
        /// </summary>
        /// <returns>newly created drive Id.</returns>
        public static string DriveCreateDrive()
        {
            try
            {
                /* Load pre-authorized user credentials from the environment.
                 TODO(developer) - See https://developers.google.com/identity for
                 guides on implementing OAuth2 for your application. */
                GoogleCredential credential = GoogleCredential.GetApplicationDefault()
                    .CreateScoped(DriveService.Scope.Drive);

                // Create Drive API service.
                var service = new DriveService(new BaseClientService.Initializer
                {
                    HttpClientInitializer = credential,
                    ApplicationName = "Drive API Snippets"
                });

                var driveMetadata = new Drive()
                {
                    Name = "Project Resources"
                };
                var requestId = Guid.NewGuid().ToString();
                var request = service.Drives.Create(driveMetadata, requestId);
                request.Fields = "id";
                var drive = request.Execute();
                Console.WriteLine("Drive ID: " + drive.Id);
                return drive.Id;
            }
            catch (Exception e)
            {
                // TODO(developer) - handle error appropriately
                if (e is AggregateException)
                {
                    Console.WriteLine("Credential Not found");
                }
                else
                {
                    throw;
                }
            }
            return null;
        }
    }
}

การเรียกใช้เมธอด drives.create จะ ไม่เปลี่ยนแปลง

พารามิเตอร์ requestId จะระบุความพยายามเชิงตรรกะในการสร้างไดรฟ์ที่แชร์ หากคำขอหมดเวลาหรือแสดงข้อผิดพลาดในแบ็กเอนด์ที่ไม่แน่นอน คุณสามารถส่งคำขอเดิมซ้ำได้ requestIdและเนื้อหาของคำขอต้อง ยังคงเหมือนเดิม

หากสร้างไดรฟ์ที่แชร์สำเร็จในคำขอก่อนหน้าหรือเนื่องจาก การลองใหม่ ระบบจะส่งการตอบกลับตามปกติ บางครั้ง เช่น หลังจากผ่านไประยะเวลานาน หรือหากเนื้อหาของคำขอมีการเปลี่ยนแปลง ระบบอาจแสดง409ข้อผิดพลาด ซึ่งบ่งชี้ว่าต้องทิ้งrequestId

เพิ่มหรือนำสมาชิกออกจากไดรฟ์ที่แชร์

เพิ่มหรือนำสมาชิกไดรฟ์ที่แชร์ออกโดยใช้แหล่งข้อมูล permissions

หากต้องการเพิ่มสมาชิก ให้สร้างสิทธิ์ในไดรฟ์ที่แชร์ นอกจากนี้ คุณยังใช้วิธีการให้สิทธิ์ กับไฟล์แต่ละไฟล์ภายในไดรฟ์ที่แชร์เพื่อมอบสิทธิ์เพิ่มเติมให้สมาชิก หรืออนุญาตให้ผู้ที่ไม่ได้เป็นสมาชิกทำงานร่วมกันในรายการที่เฉพาะเจาะจงได้ด้วย

ดูข้อมูลเพิ่มเติมและโค้ดตัวอย่างได้ที่แชร์ไฟล์ โฟลเดอร์ และไดรฟ์

ลบไดรฟ์ที่แชร์

ใช้วิธี drives.delete เพื่อลบไดรฟ์ที่แชร์ คุณต้องย้ายเนื้อหาทั้งหมดในไดรฟ์ที่แชร์ไปที่ถังขยะหรือลบออก ก่อนที่จะลบไดรฟ์ที่แชร์

จัดการไดรฟ์ที่แชร์สำหรับผู้ดูแลระบบโดเมน

ใช้พารามิเตอร์ useDomainAdminAccess กับทรัพยากร drives และ permissions เพื่อจัดการไดรฟ์ที่แชร์ทั่วทั้งองค์กร

ผู้ใช้ที่เรียกใช้เมธอดเหล่านี้ด้วย useDomainAdminAccess=true ต้องมีDrive and Docs สิทธิ์ของผู้ดูแลระบบ ผู้ดูแลระบบสามารถค้นหาไดรฟ์ที่แชร์หรืออัปเดตสิทธิ์สำหรับไดรฟ์ที่แชร์ซึ่งองค์กรเป็นเจ้าของได้ ไม่ว่าผู้ดูแลระบบจะเป็นสมาชิกในไดรฟ์ที่แชร์ใดก็ตามหรือไม่ก็ตาม

กู้คืนไดรฟ์ที่แชร์ที่ไม่มีผู้จัดการ

ตัวอย่างต่อไปนี้แสดงวิธีใช้แหล่งข้อมูลเหล่านี้เพื่อกู้คืนไดรฟ์ที่แชร์ ซึ่งไม่มีผู้จัดการอีกต่อไป

Java

drive/snippets/drive_v3/src/main/java/RecoverDrive.java
import com.google.api.client.http.HttpRequestInitializer;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.drive.DriveScopes;
import com.google.api.services.drive.model.Drive;
import com.google.api.services.drive.model.DriveList;
import com.google.api.services.drive.model.Permission;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/* class to demonstrate use-case of Drive's shared drive without an organizer. */
public class RecoverDrive {

  /**
   * Find all shared drives without an organizer and add one.
   *
   * @param realUser User's email id.
   * @return All shared drives without an organizer.
   * @throws IOException if shared drive not found.
   */
  public static List<Drive> recoverDrives(String realUser)
      throws IOException {
        /*Load pre-authorized user credentials from the environment.
        TODO(developer) - See https://developers.google.com/identity for
        guides on implementing OAuth2 for your application.*/
    GoogleCredentials credentials =
        GoogleCredentials.getApplicationDefault().createScoped(Arrays.asList(DriveScopes.DRIVE));
    HttpRequestInitializer requestInitializer = new HttpCredentialsAdapter(
        credentials);

    // Build a new authorized API client service.
    com.google.api.services.drive.Drive service =
        new com.google.api.services.drive.Drive.Builder(new NetHttpTransport(),
            GsonFactory.getDefaultInstance(),
            requestInitializer)
            .setApplicationName("Drive samples")
            .build();
    List<Drive> drives = new ArrayList<Drive>();

    // Find all shared drives without an organizer and add one.
    // Note: This example does not capture all cases. Shared drives
    // that have an empty group as the sole organizer, or an
    // organizer outside the organization are not captured. A
    // more exhaustive approach would evaluate each shared drive
    // and the associated permissions and groups to ensure an active
    // organizer is assigned.
    String pageToken = null;
    Permission newOrganizerPermission = new Permission()
        .setType("user")
        .setRole("organizer");

    newOrganizerPermission.setEmailAddress(realUser);


    do {
      DriveList result = service.drives().list()
          .setQ("organizerCount = 0")
          .setFields("nextPageToken, drives(id, name)")
          .setUseDomainAdminAccess(true)
          .setPageToken(pageToken)
          .execute();
      for (Drive drive : result.getDrives()) {
        System.out.printf("Found drive without organizer: %s (%s)\n",
            drive.getName(), drive.getId());
        // Note: For improved efficiency, consider batching
        // permission insert requests
        Permission permissionResult = service.permissions()
            .create(drive.getId(), newOrganizerPermission)
            .setUseDomainAdminAccess(true)
            .setSupportsAllDrives(true)
            .setFields("id")
            .execute();
        System.out.printf("Added organizer permission: %s\n",
            permissionResult.getId());

      }

      drives.addAll(result.getDrives());

      pageToken = result.getNextPageToken();
    } while (pageToken != null);

    return drives;
  }
}

Python

drive/snippets/drive-v3/drive_snippet/recover_drives.py
import google.auth
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError


def recover_drives(real_user):
  """Find all shared drives without an organizer and add one.
  Args:
      real_user:User ID for the new organizer.
  Returns:
      drives object

  Load pre-authorized user credentials from the environment.
  TODO(developer) - See https://developers.google.com/identity
  for guides on implementing OAuth2 for the application.
  """
  creds, _ = google.auth.default()
  try:
    # create drive api client
    service = build("drive", "v3", credentials=creds)

    drives = []

    # pylint: disable=maybe-no-member
    page_token = None
    new_organizer_permission = {
        "type": "user",
        "role": "organizer",
        "emailAddress": "user@example.com",
    }
    new_organizer_permission["emailAddress"] = real_user

    while True:
      response = (
          service.drives()
          .list(
              q="organizerCount = 0",
              fields="nextPageToken, drives(id, name)",
              useDomainAdminAccess=True,
              pageToken=page_token,
          )
          .execute()
      )
      for drive in response.get("drives", []):
        print(
            "Found shared drive without organizer: "
            f"{drive.get('title')}, {drive.get('id')}"
        )
        permission = (
            service.permissions()
            .create(
                fileId=drive.get("id"),
                body=new_organizer_permission,
                useDomainAdminAccess=True,
                supportsAllDrives=True,
                fields="id",
            )
            .execute()
        )
        print(f'Added organizer permission: {permission.get("id")}')

      drives.extend(response.get("drives", []))
      page_token = response.get("nextPageToken", None)
      if page_token is None:
        break

  except HttpError as error:
    print(f"An error occurred: {error}")

  return drives


if __name__ == "__main__":
  recover_drives(real_user="gduser1@workspacesamples.dev")

Node.js

drive/snippets/drive_v3/drive_snippets/recover_drives.js
/**
 * Find all shared drives without an organizer and add one.
 * @param{string} userEmail user ID to assign ownership to
 * */
async function recoverDrives(userEmail) {
  // Get credentials and build service
  // TODO (developer) - Use appropriate auth mechanism for your app

  const {GoogleAuth} = require('google-auth-library');
  const {google} = require('googleapis');

  const auth = new GoogleAuth({
    scopes: 'https://www.googleapis.com/auth/drive',
  });
  const service = google.drive({version: 'v3', auth});
  const drives = [];
  const newOrganizerPermission = {
    type: 'user',
    role: 'organizer',
    emailAddress: userEmail, // Example: 'user@example.com'
  };

  let pageToken = null;
  try {
    const res = await service.drives.list({
      q: 'organizerCount = 0',
      fields: 'nextPageToken, drives(id, name)',
      useDomainAdminAccess: true,
      pageToken: pageToken,
    });
    Array.prototype.push.apply(drives, res.data.items);
    for (const drive of res.data.drives) {
      console.log(
          'Found shared drive without organizer:',
          drive.name,
          drive.id,
      );
      await service.permissions.create({
        resource: newOrganizerPermission,
        fileId: drive.id,
        useDomainAdminAccess: true,
        supportsAllDrives: true,
        fields: 'id',
      });
    }
    pageToken = res.nextPageToken;
  } catch (err) {
    // TODO(developer) - Handle error
    throw err;
  }
  return drives;
}

PHP

drive/snippets/drive_v3/src/DriveRecoverDrives.php
use Google\Client;
use Google\Service\Drive;
use Ramsey\Uuid\Uuid;
function recoverDrives()
{
   try {
    $client = new Client();
    $client->useApplicationDefaultCredentials();
    $client->addScope(Drive::DRIVE);
    $driveService = new Drive($client);

    $realUser = readline("Enter user email address: ");

    $drives = array();
    // Find all shared drives without an organizer and add one.
    // Note: This example does not capture all cases. Shared drives
    // that have an empty group as the sole organizer, or an
    // organizer outside the organization are not captured. A
    // more exhaustive approach would evaluate each shared drive
    // and the associated permissions and groups to ensure an active
    // organizer is assigned.
    $pageToken = null;
    $newOrganizerPermission = new Drive\Permission(array(
        'type' => 'user',
        'role' => 'organizer',
        'emailAddress' => 'user@example.com'
    ));
    $newOrganizerPermission['emailAddress'] = $realUser;
    do {
        $response = $driveService->drives->listDrives(array(
            'q' => 'organizerCount = 0',
            'fields' => 'nextPageToken, drives(id, name)',
            'useDomainAdminAccess' => true,
            'pageToken' => $pageToken
        ));
        foreach ($response->drives as $drive) {
            printf("Found shared drive without organizer: %s (%s)\n",
                $drive->name, $drive->id);
            $permission = $driveService->permissions->create($drive->id,
                $newOrganizerPermission,
                array(
                    'fields' => 'id',
                    'useDomainAdminAccess' => true,
                    'supportsAllDrives' => true
                ));
            printf("Added organizer permission: %s\n", $permission->id);
        }
        array_push($drives, $response->drives);
        $pageToken = $response->pageToken;
    } while ($pageToken != null);
    return $drives;
   } catch(Exception $e) {
      echo "Error Message: ".$e;
   }
}

.NET

drive/snippets/drive_v3/DriveV3Snippets/RecoverDrives.cs
using Google.Apis.Auth.OAuth2;
using Google.Apis.Drive.v3;
using Google.Apis.Drive.v3.Data;
using Google.Apis.Services;

namespace DriveV3Snippets
{
    // Class to demonstrate use-case of Drive's shared drive without an organizer.
    public class RecoverDrives
    {
        /// <summary>
        /// Find all shared drives without an organizer and add one.
        /// </summary>
        /// <param name="realUser">User ID for the new organizer.</param>
        /// <returns>all shared drives without an organizer.</returns>
        public static IList<Drive> DriveRecoverDrives(string realUser)
        {
            try
            {
                /* Load pre-authorized user credentials from the environment.
                 TODO(developer) - See https://developers.google.com/identity for
                 guides on implementing OAuth2 for your application. */
                GoogleCredential credential = GoogleCredential.GetApplicationDefault()
                    .CreateScoped(DriveService.Scope.Drive);

                // Create Drive API service.
                var service = new DriveService(new BaseClientService.Initializer
                {
                    HttpClientInitializer = credential,
                    ApplicationName = "Drive API Snippets"
                });

                var drives = new List<Drive>();
                // Find all shared drives without an organizer and add one.
                // Note: This example does not capture all cases. Shared drives
                // that have an empty group as the sole organizer, or an
                // organizer outside the organization are not captured. A
                // more exhaustive approach would evaluate each shared drive
                // and the associated permissions and groups to ensure an active
                // organizer is assigned.
                string pageToken = null;
                var newOrganizerPermission = new Permission()
                {
                    Type = "user",
                    Role = "organizer",
                    EmailAddress = realUser
                };

                do
                {
                    var request = service.Drives.List();
                    request.UseDomainAdminAccess = true;
                    request.Q = "organizerCount = 0";
                    request.Fields = "nextPageToken, drives(id, name)";
                    request.PageToken = pageToken;
                    var result = request.Execute();
                    foreach (var drive in result.Drives)
                    {
                        Console.WriteLine(("Found abandoned shared drive: {0} ({1})",
                            drive.Name, drive.Id));
                        // Note: For improved efficiency, consider batching
                        // permission insert requests
                        var permissionRequest = service.Permissions.Create(
                            newOrganizerPermission,
                            drive.Id
                        );
                        permissionRequest.UseDomainAdminAccess = true;
                        permissionRequest.SupportsAllDrives = true;
                        permissionRequest.Fields = "id";
                        var permissionResult = permissionRequest.Execute();
                        Console.WriteLine("Added organizer permission: {0}", permissionResult.Id);
                    }

                    pageToken = result.NextPageToken;
                } while (pageToken != null);

                return drives;
            }
            catch (Exception e)
            {
                // TODO(developer) - handle error appropriately
                if (e is AggregateException)
                {
                    Console.WriteLine("Credential Not found");
                }
                else
                {
                    throw;
                }
            }
            return null;
        }
    }
}

ป้องกันไม่ให้ผู้ใช้ดาวน์โหลด พิมพ์ หรือคัดลอกไฟล์

คุณจำกัดวิธีที่ผู้ใช้ดาวน์โหลด พิมพ์ และคัดลอกไฟล์ภายในไดรฟ์ที่แชร์ได้

หากต้องการดูว่าผู้ใช้เปลี่ยนข้อจำกัดในการดาวน์โหลดที่ผู้จัดการใช้กับไดรฟ์ที่แชร์ได้หรือไม่ ให้ตรวจสอบฟิลด์บูลีน capabilities.canChangeDownloadRestriction หากตั้งค่า capabilities.canChangeDownloadRestrictionเป็น true คุณจะใช้ข้อจำกัดในการดาวน์โหลดกับไดรฟ์ที่แชร์ได้ ดูข้อมูลเพิ่มเติมได้ที่ ทำความเข้าใจความสามารถของไฟล์

ทรัพยากร drives มีฟิลด์ บูลีน restrictions ที่ใช้เพื่อระบุว่าดำเนินการในไดรฟ์ที่แชร์ได้หรือไม่ ข้อจำกัดจะมีผลกับไดรฟ์ที่แชร์หรือรายการภายในไดรฟ์ที่แชร์ คุณตั้งค่าข้อจำกัดได้โดยใช้วิธี drives.update

หากต้องการใช้ข้อจำกัดในการดาวน์โหลดกับไดรฟ์ที่แชร์ ผู้จัดการไดรฟ์ที่แชร์สามารถตั้งค่าฟิลด์ restrictions.downloadRestriction ของทรัพยากร drives ได้โดยใช้ออบเจ็กต์ DownloadRestriction การตั้งค่าฟิลด์บูลีน restrictedForReaders เป็น true จะประกาศว่ามีการจำกัดทั้งการดาวน์โหลดและการคัดลอกสำหรับผู้อ่าน การตั้งค่าrestrictedForWriters ฟิลด์บูลีนเป็น true จะประกาศว่ามีการจำกัดทั้งการดาวน์โหลดและการคัดลอกสำหรับ ผู้เขียน โปรดทราบว่าหากฟิลด์ restrictedForWriters เป็น true ผู้อ่านจะถูกจำกัดไม่ให้ดาวน์โหลดและคัดลอกด้วย ในทำนองเดียวกัน การตั้งค่า restrictedForWriters เป็น true และ restrictedForReaders เป็น false จะเทียบเท่ากับการตั้งค่าทั้ง restrictedForWriters และ restrictedForReaders เป็น true

ความเข้ากันได้แบบย้อนหลัง

เมื่อเปิดตัวออบเจ็กต์ DownloadRestriction แล้ว ฟังก์ชันการทำงานของฟิลด์บูลีน restrictions.copyRequiresWriterPermission ได้รับการอัปเดตแล้ว

ตอนนี้การตั้งค่า restrictions.copyRequiresWriterPermission เป็น true จะอัปเดตฟิลด์บูลีน restrictedForReaders ของออบเจ็กต์ DownloadRestriction เป็น true เพื่อประกาศว่า ทั้งการดาวน์โหลดและการคัดลอกจะถูกจำกัดสำหรับผู้อ่าน

การตั้งค่าฟิลด์ copyRequiresWriterPermission เป็น false จะอัปเดตทั้งฟิลด์ restrictedForWriters และ restrictedForReaders เป็น false ซึ่งหมายความว่าระบบจะนำการตั้งค่าการจำกัดการดาวน์โหลดหรือการคัดลอกออกสำหรับผู้ใช้ทั้งหมด

ฟิลด์ที่ควบคุมฟีเจอร์การดาวน์โหลด การพิมพ์ และการคัดลอก

ตารางต่อไปนี้แสดงฟิลด์ทรัพยากร drives ที่มีผลต่อฟังก์ชันการดาวน์โหลด พิมพ์ และคัดลอก

ช่อง คำอธิบาย เวอร์ชัน
capabilities.canCopy ไม่ว่าผู้ใช้ปัจจุบันจะคัดลอกไฟล์ในไดรฟ์ที่แชร์ได้หรือไม่ v2 และ v3
capabilities.canDownload ผู้ใช้ปัจจุบันดาวน์โหลดไฟล์ในไดรฟ์ที่แชร์ได้หรือไม่ v2 และ v3
capabilities.canChangeCopyRequiresWriterPermission ผู้ใช้ปัจจุบันเปลี่ยนcopyRequiresWriterPermissionข้อจำกัดของไดรฟ์ที่แชร์ได้หรือไม่ v2 และ v3
capabilities.canResetDriveRestrictions ผู้ใช้ปัจจุบันรีเซ็ตข้อจำกัดของไดรฟ์ที่แชร์เป็นค่าเริ่มต้นได้หรือไม่ v2 และ v3
capabilities.canChangeDownloadRestriction ผู้ใช้ปัจจุบันเปลี่ยนข้อจำกัดในการดาวน์โหลดของไดรฟ์ที่แชร์ได้หรือไม่ v3 เท่านั้น
restrictions.copyRequiresWriterPermission ปิดใช้ตัวเลือกในการคัดลอก พิมพ์ หรือดาวน์โหลดไฟล์ภายในไดรฟ์ที่แชร์สำหรับผู้มีสิทธิ์อ่านและผู้แสดงความคิดเห็นหรือไม่ เมื่อ true ระบบจะตั้งค่าฟิลด์ที่มีชื่อคล้ายกันเป็น true สำหรับไฟล์ใดก็ตามที่อยู่ในไดรฟ์ที่แชร์นี้ v2 และ v3
restrictions.downloadRestriction ข้อจำกัดในการดาวน์โหลดที่ผู้จัดการไดรฟ์ที่แชร์ใช้ v3 เท่านั้น

ข้อจำกัดของโฟลเดอร์

โฟลเดอร์ในไดรฟ์ที่แชร์มีขีดจำกัดของพื้นที่เก็บข้อมูลบางอย่าง ดูข้อมูลได้ที่ขีดจำกัดของไดรฟ์ที่แชร์ใน Google ไดรฟ์

จำนวนรายการสูงสุด

แต่ละโฟลเดอร์ในไดรฟ์ที่แชร์ของผู้ใช้จะมีขีดจำกัดอยู่ที่ 500,000 รายการ ซึ่งรวมถึง ไฟล์ โฟลเดอร์ และทางลัด

เมื่อถึงขีดจำกัดแล้ว ไดรฟ์ที่แชร์จะรับรายการไม่ได้อีก หากต้องการ รับไฟล์อีกครั้ง ผู้ใช้จะต้องลบรายการออกจากโฟลเดอร์อย่างถาวร โปรดทราบว่ารายการในถังขยะจะนับรวมในโควต้า แต่รายการที่ลบถาวรจะไม่นับรวม ดูข้อมูลเพิ่มเติมได้ที่ทิ้งหรือลบไฟล์และโฟลเดอร์

ขีดจำกัดความลึกของโฟลเดอร์

โฟลเดอร์ในไดรฟ์ที่แชร์จะมีโฟลเดอร์ซ้อนกันได้ไม่เกิน 100 ระดับ ซึ่งหมายความว่าโฟลเดอร์ย่อยจะจัดเก็บไว้ในโฟลเดอร์ที่มีระดับความลึกมากกว่า 99 ระดับไม่ได้ ข้อจำกัดนี้ใช้กับโฟลเดอร์ย่อยเท่านั้น

การพยายามเพิ่มโฟลเดอร์มากกว่า 100 ระดับจะแสดงการตอบกลับรหัสสถานะ HTTP teamDriveHierarchyTooDeep