2

我已经实现了 javascript 代码以将多个块中的文件上传到谷歌云存储。

以下是我执行上传文件的流程: 1. 用户使用 javascript 客户端 Web 应用程序选择要上传的文件 {请求来自亚洲地区} 2. javascript 客户端应用程序请求到我们在 NODEJS 中实现的应用程序服务器 {托管在谷歌云的计算引擎中- 美国地区} 允许文件上传 {authorization} 2. Nodejs 应用服务器向客户端应用返回一个签名 URL 3. 客户端应用开始使用该签名 url 将文件以多个块上传到谷歌存储 4. 将成功的客户端报告上传到应用服务器

我能够以多个块上传文件,但我观察到,如果我在谷歌云美国区域托管 nodejs 应用程序服务器而不是托管在执行客户端应用程序请求的同一台机器上,上传速度会慢 2-3 倍

如果您有解决方案如何提高上传性能,请告诉我。

google cloud signed-url 文档中提到了一些解决方法:

可续传上传被固定在它们开始的区域。例如,如果您在美国创建可续传上传 URL 并将其提供给亚洲的客户,则上传仍会通过美国。在未启动的区域执行可恢复上传可能会导致上传缓慢。为避免这种情况,您可以让服务器构造和签名初始 POST 请求,然后将签名的 URL 提供给客户端,以便从其位置启动上传。一旦启动,客户端可以正常使用生成的会话 URI 来发出不需要签名的 PUT 请求。

但是有了那个参考:

  1. 我找不到任何代码示例:一旦客户端从服务器收到签名的 url,如何构造初始 JSON API 调用?
  2. 第一次通话应该有什么反应?以及如何提取会话 URI
  3. 如何使用会话 URI 上传更多块?
4

1 回答 1

1

您可能会混淆两个独立的 GCS 功能。GCS 允许通过多种方式将可恢复的上传授权给第三方而无需凭据。

首先,也是首选的是签名 URL。您将签名的 URL 发送到客户端,该客户端将允许该客户端开始可恢复上传。

其次,由于您上面提到的区域固定,不太优选的是让服务器自己启动可恢复上传,然后将上传 ID 传递给客户端。

听起来您想要第一件事,但正在使用第二件事。

使用签名 URL 需要使用 XML API,它以与 JSON API 类似的方式处理可恢复上传:https ://cloud.google.com/storage/docs/xml-api/resumable-upload

您需要签署第一个 POST 调用以创建上传并将该 URL 传递给用户以自行调用。

于 2017-04-19T20:17:28.617 回答