Google云存储 - 从网上下载文件

时间:2015-02-26 18:02:20

标签: google-cloud-storage gsutil

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

下载和上传文件会在我的服务器中产生大量流量。 有没有办法让google云直接从http下载文件?

3 个答案:

答案 0 :(得分:8)

只要您的下载量小于4.6 GB,从Google Cloud Shell即可轻松完成此操作。启动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,您仍然可以执行此操作,但是您需要使用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

更新 我只是找到了一种似乎更简单的方法,该方法似乎适用于所有文件大小:

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

基本上卷曲直接将数据“流”到存储桶。

答案 1 :(得分:2)

Google云端存储仅直接接受数据。没有办法将URL传递给它并将其作为对象保存。

但是,您没有理由不能自己构建此功能。例如,您可以设置一个或多个专用GCE实例,这些实例将加载URL,然后将其保存到GCS。谷歌并不收取网络进入GCE或从GCE到区域内的GCS收费,这有助于。

答案 2 :(得分:0)

Google云存储提供了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请求here的文档。

要将文件上传到公共存储桶,有多个选项。一种简单的方法是向https://www.googleapis.com/upload/storage/v1/b/<bucket>/o发出POST请求,其中<bucket>是您的公共存储桶的名称。此方法最适合小于5 MB的小文件。您可以阅读此API请求here的文档。较大的上载将需要采用其他方法,如here所述。再说一次,我自己还没有尝试过这种方法,但是它无需身份验证即可工作。

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

最后,如果您需要对上传进行限制(例如最大文件大小),则需要使用签名的策略文档,如here所述。这与签名的URL相似,因为它是应由应用程序后端生成的URL,并包括对时间敏感的签名。策略文档是Base64编码的,并包含在生成的URL中。它描述了对上传的限制。 URL签名包括策略文档,因此Google Cloud Storage知道将该特定策略应用于对该URL的上传请求。

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