访问公开数据

您选择用于访问公开数据的方法取决于您要如何处理数据。通过 Google Cloud Console 访问公开数据时,您必须进行 Google 身份验证。您可以使用任何 Google 帐号进行身份验证;该帐号不必与包含公开数据的项目相关联,也不需要注册 Cloud Storage 服务。

与前面的方法不同,在使用 gsutil 或 Cloud Storage API 链接访问公开数据时,访问者不需要进行身份验证。这些方法适用于公开共享的数据的通用链接。例如,您可以通过客户端库或命令行工具(比如 cURL)在网页中使用 API 链接。

如需访问公开数据,请执行以下操作

无需身份验证即可访问此链接。例如,您可以在网页中使用此链接,也可以使用命令行工具(如 cURL)通过此链接执行下载操作。

  1. 获取包含公开数据的存储分区的名称。

  2. 使用以下 URI 访问该存储分区中的对象:

    https://storage.googleapis.com/BUCKET_NAME/OBJECT_NAME

例如,Google 公开存储分区 gcp-public-data-landsat 包含 Landsat 公开数据集。您可以将公开共享的对象 LC08/PRE/063/046/LC80630462016136LGN00/LC80630462016136LGN00_B11.TIF 链接到以下链接:

https://storage.googleapis.com/gcp-public-data-landsat/LC08/PRE/063/046/LC80630462016136LGN00/LC80630462016136LGN00_B11.TIF

控制台

访问此链接需要向 Google 进行身份验证。通常应该使用 API 链接标签页中说明的方法来访问公共存储分区中各个对象的链接。如果想通过 Cloud Console 访问公开对象,您必须拥有包含这些对象的存储分区的 storage.objects.list 权限。

  1. 获取公开存储分区的名称。

  2. 在网络浏览器中,通过以下 URI 访问该存储分区(系统会视需要要求您登录):

    https://console.cloud.google.com/storage/browser/BUCKET_NAME

例如,Google 公开存储分区 gcp-public-data-landsat 包含 Landsat 公开数据集。您可以使用以下网址访问该存储分区:

https://console.cloud.google.com/storage/browser/gcp-public-data-landsat

gsutil

  1. 如果您没有 gsutil,请按照以下说明安装 gsutil

  2. 获取包含公开数据的存储分区的名称。

  3. 如果该存储分区已整体公开(而不只是仅部分数据被公开),您可以使用 ls 命令列出该存储分区中包含的部分或全部数据(对象)。

    例如,Google 公开存储分区 gcp-public-data-landsat 包含 Landsat 公开数据集。您可以使用以下命令列出前缀为 LC08/PRE/063/046/LC80630462016 的文件:

    gsutil ls -r gs://gcp-public-data-landsat/LC08/PRE/063/046/LC80630462016*

  4. 使用 cp 命令获取该存储分区中包含的特定公开对象。

    例如,以下命令会将文件从存储分区 gcp-public-data-landsat 下载到您的本地目录:

    gsutil cp gs://gcp-public-data-landsat/LC08/PRE/063/046/LC80630462016136LGN00/LC80630462016136LGN00_B11.TIF .

代码示例

C++

如需了解详情,请参阅 Cloud Storage C++ API 参考文档

namespace gcs = google::cloud::storage;
[](std::string const& bucket_name, std::string const& object_name) {
  // Create a client that does not authenticate with the server.
  gcs::Client client{gcs::oauth2::CreateAnonymousCredentials()};

  // Read an object, the object must have been made public.
  gcs::ObjectReadStream stream = client.ReadObject(bucket_name, object_name);

  int count = 0;
  std::string line;
  while (std::getline(stream, line, '\n')) {
    ++count;
  }
  std::cout << "The object has " << count << " lines\n";
}

Java

如需了解详情,请参阅 Cloud Storage Java API 参考文档

import com.google.cloud.storage.Blob;
import com.google.cloud.storage.BlobId;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;
import java.nio.file.Path;

public class DownloadPublicObject {
  public static void downloadPublicObject(
      String bucketName, String publicObjectName, Path destFilePath) {
    // The name of the bucket to access
    // String bucketName = "my-bucket";

    // The name of the remote public file to download
    // String publicObjectName = "publicfile.txt";

    // The path to which the file should be downloaded
    // Path destFilePath = Paths.get("/local/path/to/file.txt");

    // Instantiate an anonymous Google Cloud Storage client, which can only access public files
    Storage storage = StorageOptions.getUnauthenticatedInstance().getService();

    Blob blob = storage.get(BlobId.of(bucketName, publicObjectName));
    blob.downloadTo(destFilePath);

    System.out.println(
        "Downloaded public object "
            + publicObjectName
            + " from bucket name "
            + bucketName
            + " to "
            + destFilePath);
  }
}

Python

如需了解详情,请参阅 Cloud Storage Python API 参考文档

from google.cloud import storage

def download_public_file(bucket_name, source_blob_name, destination_file_name):
    """Downloads a public blob from the bucket."""
    # bucket_name = "your-bucket-name"
    # source_blob_name = "storage-object-name"
    # destination_file_name = "local/path/to/file"

    storage_client = storage.Client.create_anonymous_client()

    bucket = storage_client.bucket(bucket_name)
    blob = bucket.blob(source_blob_name)
    blob.download_to_filename(destination_file_name)

    print(
        "Downloaded public blob {} from bucket {} to {}.".format(
            source_blob_name, bucket.name, destination_file_name
        )
    )

后续步骤