繁体   English   中英

谷歌云存储 - 从网络下载文件

[英]Google cloud storage - Download file from web

我想在我的下一个项目中使用 Google 云存储。 我的目标是跟踪各种网站并收集一些照片。 因为,我阅读了 gsutil 的文档; 我可以手动将文件下载到我的服务器并使用 gsutil 将其上传到谷歌云存储。

下载和上传文件在我的服务器中产生了如此多的流量。 有没有办法让谷歌云直接从http下载文件?

主要回答

这在 Google Cloud Shell 中很容易做到。 似乎适用于所有文件大小:

 curl http://speedtest.tele2.net/10GB.zip | gsutil cp - gs://YOUR_BUCKET_NAME/10GB.zip

基本上 curl 将数据直接流式传输到存储桶。

替代(文件小于 ~ 4.6 GB)

原始方法:只要您的下载小于 ~ 4.6 GB,此方法就有效。 启动 Cloud Shell(在 GCP 中登录项目后右上角的第一个图标)并使用 wget 下载所需的文件。 例如,要下载 7-Zip 类型:

wget https://www.7-zip.org/a/7z1805-x64.exe

现在,有了 Cloud Shell 用户主页中的文件,您可以使用 gsutil 命令将其复制到 Google Cloud Storage 存储分区:

gsutil cp ./7z1805-x64.exe gs://your_bucket_name/

替代(大于 ~ 4.6 GB)

如果文件大于 4.6 GB,您仍然可以这样做,但您需要使用 gcsfuse 在 Cloud Shell 中挂载存储桶:

在您的 Cloud Shell 用户主页中创建一个目录

 mkdir ~/mybucket

现在使用 gcsfuse 将您的存储桶挂载到该目录中:

 gcsfuse bucket_name ~/mybucket

将当前目录改为挂载点目录:

 cd mybucket

(如果您想玩得开心,请运行“df -h。”以查看该挂载点中有多少空间)

现在使用 wget 将文件直接放入您的存储桶中(使用 10GB 网络文件的示例):

 wget https://speed.hetzner.de/10GB.bin

Google Cloud Storage 仅直接接受数据。 没有办法向它传递一个 URL 并让它将内容保存为一个对象。

但是,您没有理由不能自己构建此功能。 例如,您可以设置一个或多个专用 GCE 实例来加载 URL,然后将它们保存到 GCS。 Google 也不会对进入 GCE 的网络入口或从 GCE 进入区域内的 GCS 收费,这也有帮助。

Google Cloud Storage 提供了一个JSON API 您可以在应用程序中直接向 JSON API 发出 HTTP 请求,这会将文件上传和下载流量直接定向到 Google Cloud Storage。

要从公共 Google Cloud Storage 存储桶下载文件,请向https://www.googleapis.com/storage/v1/b/<bucket>/o/<object>发出 GET 请求,其中<bucket>是名称您的 Google Cloud Storage 存储桶的名称, <object>是存储桶中文件的名称。 这应该可以在没有任何身份验证的情况下工作,但我自己还没有尝试过。 您可以在 此处阅读此 API 请求的文档。

要将文件上传到公共存储桶,有多种选择。 简单的方法是向https://www.googleapis.com/upload/storage/v1/b/<bucket>/o发出 POST 请求,其中<bucket>是您的公共存储桶的名称。 这种方法最适合小于 5 MB 的小文件。 您可以在此处阅读此 API 请求的文档。 更大的上传将需要不同的方法,概述here 同样,我自己还没有尝试过这种方法,但它应该可以在没有身份验证的情况下工作。

如果您需要执行经过身份验证的上传和下载,事情会变得稍微复杂一些。 Google Cloud Storage 支持使用签名 URL 进行上传和下载。 这些 URL 描述了 Google Cloud Storage 上的特定操作,例如上传或下载,并带有时间敏感的签名。 任何拥有 URL 的人都可以在 Google Cloud Storage 上执行指定的操作。 它们可以安全地从服务器传递到客户端。 您可以在应用程序的后端生成签名 URL 并将其传递给前端。 然后前端可以使用该 URL 直接上传到 Google Cloud Storage。 有关签名 URL 的更多信息,请访问此处

最后,如果你需要把对上传的限制,如最大文件大小,你需要使用一个签名政策文件,描述在这里 这类似于签名 URL,因为它是一个应该由您的应用程序后端生成的 URL,并包含一个时间敏感的签名。 策略文档采用 Base64 编码并包含在生成的 URL 中。 它描述了对上传的限制。 URL 签名包括策略文档,以便 Google Cloud Storage 知道将该特定策略应用于对该 URL 的上传请求。

来源:我和我的团队正在构建一个托管在 Google Cloud Platform 上的全栈应用程序,该应用程序使用 Google Cloud Storage 进行上传和下载。 我们正在使用签名的政策文件进行上传。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM