我正在做一个项目,在云存储和桶上创建一个抽象。然而,我遇到了一个问题,即如何最好地支持为GCS发送大文件。我们需要以块形式发送一个大文件的能力,并且我们希望能够控制以块形式发送的缓冲区/流。
S3有多部分上传,它允许我们并行发送文件块。不幸的是,GCS不支持这一点,它们有复合对象,允许我们并行发送文件。然而,复合对象也有其自身的局限性。例如,无法使用客户端加密、MD5摘要、保留策略、必须手动清理临时文件等等,这些都是有问题的,因为我们想要支持这些东西。
从文档来看,在GCS上发送大文件的推荐方式是通过可恢复的上载。我们的用例是以缓冲块的形式发送一个未知大小的大文件,前提是我们知道每个块的大小以及块是否是最后的部分。根据我的理解,最理想的情况是用content-range=[offset-(offset+chunkSize)]/*
和变量chunkSize发送前N-1个块,并用content-range=[offset-(offset+remainingSize)]/[TOTAL_SIZE]
发送最后一个块。
我的问题是,如果一个大块上传被中断了怎么办?
恢复中断的块上传意味着什么?我们是发送当前块的剩余字节(content-range=[lastbyte-(chunkSize-lastByte)]/*
)还是与下一个块一起发送(content-range=[lastbyte-(chunkSize-lastByte)+chunksize]/*
)?
此外,对于可恢复上传也有一个限制,其中每个块必须是256KB的倍数。这是否意味着一个中断会使块不可能保持同步?因此,与其期望块具有常规内容范围content-range=[offset-(offset+chunksize)]/*
相反,可恢复上载中的中断是否会导致剩余块动态发送,直到最后一个块为止?
太感谢你了。
恢复中断的块上传意味着什么?我们是发送当前块的剩余字节(content-range=[lastbyte-(chunkSize-lastByte)]/),还是将其与下一个块一起发送(content-range=[lastbyte-(chunkSize-lastByte)+chunksize]/)?
看情况.没有要求让所有的块大小都一样,也没有要求在上传开始时就对它们下定决心,也没有要求记住你发送了哪些块。正如您在下面注意到的,需要发送大小为256Kib倍数的所有块,但最后一个块除外。
要回答您的问题:如果(chunkSize-LastByte)
是256kib的倍数,您可以将其作为新块发送,或者您可能需要将字节从lastbyte
发送到lastbyte+N*256kib
此外,对于可恢复上传也有一个限制,其中每个块必须是256KB的倍数。这是否意味着一个中断会使块不可能保持同步?
不,这意味着当你继续上传时,块的边界可能需要改变。
在实践中,我认为GCS总是在256KIB的边界上承诺,但我不相信有任何保证它会一直这样做。
问题内容: 我正在尝试从Yahoo!下载大文件!如果没有在100秒之内完成下载,显然是由(不是我)设置的网站服务器断开下载。该文件足够小,通常可以成功传输。在数据速率很慢并且下载被断开的情况下,是否有办法在断开连接发生的文件偏移处恢复URLConnection?这是代码: 问题答案: 尝试使用“范围”请求标头: 完成此操作后,您可以在给定的位置(例如,在下载数据的长度之前)开始在此处写入新下载的数
问题内容: 有没有办法将可执行块作为参数传递给静态方法?有可能吗?例如我有这种方法 或类似的东西。实际上,这要复杂得多,我只是简化了这个问题。我试图重构项目,并创建了一个通用实用程序类,其中包含类使用的静态方法。 问题答案: 您可以使用对象: 然后,您可以使用以下命令调用它: 编辑(对不起,@ Bohemian):在Java 8中,可以使用lambdas简化调用代码: 您仍然会以相同的方式声明。l
使用 fetch 方法来上传文件相当容易。 连接断开后如何恢复上传?这里没有对此的内建选项,但是我们有实现它的一些方式。 对于大文件(如果我们可能需要恢复),可恢复的上传应该带有上传进度提示。由于 fetch 不允许跟踪上传进度,我们将会使用 XMLHttpRequest。 不太实用的进度事件 要恢复上传,我们需要知道在连接断开前已经上传了多少。 我们有 xhr.upload.onprogress
问题内容: 我正在使用python 2.7请求模块使用以下代码下载二进制文件,如何使此代码从部分下载的文件中“自动恢复”下载。 如果可能的话,我宁愿只使用模块来实现这一目标。 问题答案: 如果Web服务器支持范围请求,则可以将Range标头添加到您的请求中: 您将收到StartPos和StopPos之间的部分。如果不知道StopPos,请使用: 因此您的代码将是:
有人能告诉我如何在dropwizard 1.2.6中实现可恢复的文件上传吗?因此,如果用户试图上传一个大文件(4-5 GB),如果出现网络故障或浏览器错误关闭,那么用户将能够从中断的地方恢复该过程。
附注。此示例在空手道版本:0.9.0.rc5中工作