访问公开数据

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

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

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

控制台

  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 bucket_name, std::string 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);
  }
}

  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

访问者不需要进行身份验证即可使用此链接。例如,它适合作为网页中的链接,或者,访问者可以通过此链接,使用命令行工具(比如 cURL)执行下载操作。

后续步骤