当最终流大小未知时,将流上传到Google Storage API

因此Google Storage具有出色的API,可用于可恢复的上传:https://cloud.google.com/storage/docs/json_api/v1/how-tos/resumable-upload,我想利用该API上传多个块中的大对象。但是,这是在流处理管道中完成的,其中流中的字节总数事先未知。

根据API的文档,您应该使用Content-Range标头来告知Google Storage API您已完成文件的上传,例如:

PUT https://www.googleapis.com/upload/storage/v1/b/myBucket/o?uploadType=resumable&upload_id=xa298sd_sdlkj2 HTTP/1.1
Content-Length: 1024
Content-Range: bytes 1023-2048/2048

[BYTES 1023-2048]

如果我了解它是如何正常工作的,则bytes 1023-2048/2048标头中的Content-Range值就是Google存储空间确定您要上传的最后一块数据,并且可以成功完成可恢复数据的操作完成后上传会话。

但是对于我来说,总流大小是未知的,因此我需要继续上传,直到没有更多数据要上传为止。有没有一种使用Google Storage API做到这一点的方法?理想情况下,我希望以某种方式手动告诉API“嘿,我完成了,不要再期望我收到任何其他数据了。”

qe2004 回答:当最终流大小未知时,将流上传到Google Storage API

您链接的文档指出:

  

内容长度。 必需,除非您使用的是chunked transfer encoding。设置为此初始请求正文中的字节数。

因此,如果您单击链接到分块传输编码的链接,则HTTP规范将说明如何在传输完成之前发送数据块:

  

Chunked使未知大小的内容流可以作为   长度分隔的缓冲区序列,使发送方能够   保留连接持久性,让接收者知道它何时具有   收到了整封邮件。

单独实现它可能并不容易,所以我建议找到一个知道如何为您执行此操作的HTTP客户端库。

,
  

但是,对于我来说,总流大小是未知的,

在这种情况下,您需要在PUT请求中发送Content-Range: bytes 1023-2048/*。但是请注意,这些请求必须是256KiB的倍数:

https://cloud.google.com/storage/docs/json_api/v1/how-tos/resumable-upload#example_uploading_the_file

  

所以我需要继续上传,直到没有更多数据可以上传为止。是否可以使用Google Storage API做到这一点?

是的。您使用bytes NNNNN-MMMMM/*发送数据块。

  

理想情况下,我希望通过某种方式手动告诉API“嘿,我做完了,不要再期待我提供任何数据了。”

您可以执行以下操作:(a)发送不是256KiB倍数的块,或者(b)使用bytes NNN-MMM/(MMM+1)发送块。也就是说,最后一块包含上载的总大小,并指示它包含最后一个字节。

本文链接:https://www.f2er.com/3166293.html

大家都在问