【问题标题】:How do I transfer images from public database to Google Cloud Bucket without downloading locally如何在不下载本地的情况下将图像从公共数据库传输到 Google Cloud Bucket
【发布时间】:2019-03-06 22:31:20
【问题描述】:

我有一个 csv 文件,其中包含超过 10,000 个指向 Internet 上图像的 url。我想对它们执行一些机器学习任务。我正在为此任务使用 Google Cloud Platform 基础架构。我的第一个任务是将所有这些图像从 url 传输到 GCP 存储桶,以便以后可以通过 docker 容器访问它们。

我不想先在本地下载它们然后再上传它们,因为那是太多的工作,而是直接将它们传输到存储桶。我查看了Storage Transfer Service,对于我的具体情况,我认为我将使用URL list。谁能帮我弄清楚下一步该怎么做。这甚至是一个可能的选择吗? 如果是,我如何为列表中的每个 url 生成一个提到 here 的 MD5,并获取每个 url 的图像字节数?

【问题讨论】:

  • 如果您必须提供每个文件的大小和哈希值,并且您还没有本地可用的每个文件进行检查,您将不得不下载它们以获取该数据反正。如果你下载了文件,那么你最好在有文件的时候立即上传。
  • 那么有没有其他方法可以不使用任何哈希或字节信息直接将其“转移”到桶中?
  • 我不知道,但您正在查看的服务似乎需要它。该用例适用于完全管理他们想要上传的所有内容的开发人员,然后自动上传,可能来自他们控制的其他服务器。这听起来不适合抓取随机 URL 进行存储。
  • 谢谢@DougStevenson。假设说,我下载文件,如何为下载的每个图像生成与每个 url 对应的 MD5 哈希。文档只是提到 md5-test 作为示例here 不清楚
  • 有很多资源可以帮助您了解如何以您选择的语言对某些文件内容进行 MD5 处理。这是一项非常常见的任务。

标签: google-cloud-platform google-cloud-storage md5


【解决方案1】:

如您所述,Storage Transfer Service 要求您向其提供每个文件的 MD5。幸运的是,许多 HTTP 服务器可能会为您提供对象的 MD5,而无需您下载它。发出 HTTP HEAD 请求可能会导致服务器在其响应中为您提供 Content-MD5 标头,该标头可能不是存储传输服务所需的格式,但可以转换为该格式。

这里的缺点是网络服务器不一定会为您提供这些信息。不检查就无法知道。

另一个值得考虑的选择是设置一个或多个 GCE 实例并从那里运行脚本以将对象下载到您的 GCE 实例,然后从那里将它们上传到 GCS。这仍然涉及到“本地”下载它们,但本地不再意味着脱离谷歌云的地方,这应该会大大加快速度。您还可以通过将 CSV 文件拆分为 10 个文件(每个文件包含 1000 个对象)并设置 10 个 GCE 实例来完成工作来划分工作。

【讨论】:

    猜你喜欢
    • 2020-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-17
    • 2017-01-01
    • 2017-11-08
    • 2022-08-05
    • 1970-01-01
    相关资源
    最近更新 更多