将文件从 URL 传输到 Cloud Storage

2023-11-29

我是一名 Ruby 开发人员,尝试使用 Python 编写的 Google Cloud Functions,但在将远程文件从给定 URL 传输到 Google Cloud Storage (GCS) 时遇到了困难。

在等效的 RoR 应用程序中,我下载到应用程序的临时存储,然后上传到 GSC。

我希望有一种方法可以通过云功能简单地将远程文件“下载”到我的 GCS 存储桶中。

这是我对一些注释所做的简化示例,真正的代码从私有 API 获取 URL,但这工作正常并且不是问题所在。

from google.cloud import storage
project_id = 'my-project'
bucket_name = 'my-bucket'
destination_blob_name = 'upload.test'
storage_client = storage.Client.from_service_account_json('my_creds.json')

# This works fine
#source_file_name = 'localfile.txt'

# When using a remote URL I get 'IOError: [Errno 2] No such file or directory'
source_file_name = 'http://www.hospiceofmontezuma.org/wp-content/uploads/2017/10/confused-man.jpg'

def upload_blob(bucket_name, source_file_name, destination_blob_name):
    bucket = storage_client.get_bucket(bucket_name)
    blob = bucket.blob(destination_blob_name)
    blob.upload_from_filename(source_file_name)

upload_blob(bucket_name, source_file_name, destination_blob_name)

提前致谢。


无法直接从 URL 将文件上传到 Google Cloud Storage。由于您是从本地环境运行脚本,因此要上传的文件内容需要位于同一环境中。这意味着 url 的内容需要存储在内存中或文件中。

基于您的代码显示如何执行此操作的示例:

Option 1: 您可以使用wget模块,它将获取 url 并将其内容下载到本地文件中(类似于wgetCLI 命令)。请注意,这意味着该文件将存储在本地,然后从该文件上传。我添加了os.remove上传完成后删除文件的行。

from google.cloud import storage
import wget
import io, os

project_id = 'my-project'
bucket_name = 'my-bucket'
destination_blob_name = 'upload.test'
storage_client = storage.Client.from_service_account_json('my_creds.json')

source_file_name = 'http://www.hospiceofmontezuma.org/wp-content/uploads/2017/10/confused-man.jpg'

def upload_blob(bucket_name, source_file_name, destination_blob_name):   
    filename = wget.download(source_file_name)

    bucket = storage_client.get_bucket(bucket_name)
    blob = bucket.blob(destination_blob_name)
    blob.upload_from_filename(filename, content_type='image/jpg')
    os.remove(filename)

upload_blob(bucket_name, source_file_name, destination_blob_name)

Option 2: 使用urllib模块,工作原理类似于wget模块,但不是写入文件,而是写入变量。请注意,我在 Python3 中完成了这个示例,有一些差异如果您计划在 Python 2.X 中运行脚本。

from google.cloud import storage
import urllib.request

project_id = 'my-project'
bucket_name = 'my-bucket'
destination_blob_name = 'upload.test'
storage_client = storage.Client.from_service_account_json('my_creds.json')

source_file_name = 'http://www.hospiceofmontezuma.org/wp-content/uploads/2017/10/confused-man.jpg'

def upload_blob(bucket_name, source_file_name, destination_blob_name):   
    file = urllib.request.urlopen(source_file_name)

    bucket = storage_client.get_bucket(bucket_name)
    blob = bucket.blob(destination_blob_name)

    blob.upload_from_string(link.read(), content_type='image/jpg')

upload_blob(bucket_name, source_file_name, destination_blob_name)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将文件从 URL 传输到 Cloud Storage 的相关文章

随机推荐

  • 如何根据用户或电子邮件过滤仪表板内容?

    我正在尝试在 Google Data Studio 上构建一个仪表板 该仪表板会根据访问仪表板的用户 使用其 Google 帐户凭据 自动过滤数据 以下是一些细节 因此 这个仪表板应该为员工显示一些汇总数据 但我们希望限制可见性并实施一些访
  • (无意中)在迭代列表时跳过项目

    我有一个列表 我想从中删除其他列表中未出现的项目 我尝试过以下方法 for w in common for i in range 1 n if not w in words i common remove w 但是 这无法删除某些项目 添加
  • 如何以编程方式使用 Google Analytics API 函数获取指标和维度列表?

    我正在尝试使用 Google Analytics API 需要通过 Google Analytics API 获取指标和维度列表 如何在 php 中使用 Google Analytics API 函数获取指标和维度列表 这无法通过 API
  • 团队构建:使用 MSDeploy 本地发布

    我刚刚开始使用团队构建功能 我发现做一些非常简单的事情所需的大量事情有点令人不知所措 我目前的设置是一个包含 Web 应用程序 组装应用程序和测试应用程序的解决方案 Web 应用程序设置了一个通过文件系统发布的 PublishProfile
  • Magento:将商品添加到购物车时如何更改商品价格

    当我将商品添加到购物车时 我希望能够以编程方式 而不是通过目录或购物车规则 更改商品价格 以下回答以编程方式将产品添加到购物车并更改价格展示了如何在更新购物车时执行此操作 而不是在添加产品时执行此操作 Thanks 您可以使用观察者类来监听
  • 使用 TypeScript 的 React 组件中的默认属性值

    我不知道如何使用 Typescript 为我的组件设置默认属性值 这是源代码 class PageState export class PageProps foo string bar export class PageComponent
  • hibernate加载对象图的正确方法是什么

    假设我有 3 个表 GrandCat Cat 和 Kitt 它们具有一对多的关系 所以我有以下课程 所有关联都是延迟加载 GrandCat int age Set
  • 在 MFC 中添加加速器(快捷方式) - 如何?

    我找到了这个链接 http support microsoft com kb 222829 但我无法理解那么多 好的 我知道我需要将其添加到我的头文件中 HACCEL m hAccelTable 然后是这个 m hAccelTable Lo
  • LaunchDaemons 和环境变量

    一段时间以来 我注意到我的 MacPorts 安装的 Apache2 实例在我启动时尚未启动 MacPorts Apache2 在启动时停止启动 LaunchDaemon 已加载 今天我在日志文件中发现了一些可能指向答案的内容 但我找不到任
  • 启用项目功能时启用 Rust nightly 功能

    在库箱中 我想按需提供回溯并使用 Rust 夜间回溯功能 为了做到这一点 Rust 需要设置 feature backtrace 在我的板条箱根部 有没有办法表达仅当设置了创建级别功能 backtrace 时 我才需要 Rust 夜间功能
  • 使用 Excel 中的 VBA 将 2 个单元格的内容合并到另一个第 3 个单元格中

    我有两个单元格 A1 和 A2 其中每一个的内容都是一个字符串 A1 你好 A2 世界 我的目标是将 A1 和 A2 的内容合并到另一个单元格中 例如A3即A3的内容应该是 你好世界 我想使用 VBA 宏来执行此操作 而不仅仅是将字符串作为
  • 使用 dplyr 按多组进行汇总

    我正在尝试使用 dplyr 来总结基于 2 个组的数据集 年份 和 区域 数据集如下所示 Year Area Num 1 2000 Area 1 99 2 2001 Area 3 85 3 2000 Area 1 60 4 2003 Are
  • 使用 window.onscroll 事件检测页面/框架滚动

    我想定位一个DIV位于页面内 以便即使用户垂直滚动页面 用户也可以看到它 该页面的顶部有一个标题 即75 px高的 现在 当用户位于页面顶部并且没有垂直滚动时 DIV必须位于标题下方 然而 一旦用户滚动页面导致标题消失 同样的DIV现在必须
  • 如何在 PHP 中检查 PDF 文件是否受密码保护 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 使用 PHP 上传多个文件时 如何检查上传的 PDF 文件是否受密码保护 如果它
  • java中如何将时间戳转换为日期和时间?

    我有一个来自 Linux 服务器的 json 时间戳 我想使用 Java 将其转换为简单的日期时间格式 我需要以下格式的日期和时间 dd mm yyyy hh mm ss 这是我的 JSON 数据 batch date 1419038000
  • 同步push_back和std::thread

    My code void build std vector
  • Symfony2 从 api 数据填充选择列表

    我必须通过 Api 调用填充选择列表 我尝试了几种方法但没有成功 我认为最好的方法是实现 ChoiceListInterface 有人已经做到了吗 Thanks Extend 惰性选择列表并实施加载选择列表方法 例如 ApiChoiceLi
  • 复制 Excel 单元格数据直到列中最近的填充单元格

    我是 Excel 的新手 我面临一些问题 我有一个 Excel 工作表 必须将其导入到我的另一个程序中 请考虑以下格式 Heading1 Sub heading1 Sub Sub heading1 Sub Sub heading2 Sub
  • Ruby 数组注入

    我试图使用注入方法记录 10 个线程的平均运行时间 但它给了我这个错误 undefined method for
  • 将文件从 URL 传输到 Cloud Storage

    我是一名 Ruby 开发人员 尝试使用 Python 编写的 Google Cloud Functions 但在将远程文件从给定 URL 传输到 Google Cloud Storage GCS 时遇到了困难 在等效的 RoR 应用程序中