如何在Java中以Azure云Blob开始取消上传

时间:2019-04-10 07:43:34

标签: java blob azure-blob-storage blobstorage

我正在尝试使用Java在Azure Blob存储上上传文件(输入流)。 在正常情况下,它已成功上传,但是在某些情况下,我想取消上传操作。 我找不到相同的解决方案。

  

我们可以在上传文件时添加一些取消过滤器吗?

我可以关闭执行程序,因此上传线程被中断,但是文件的已上传内容不会恢复。

1 个答案:

答案 0 :(得分:0)

我看到您想实现从上一个断点恢复上传文件进度的功能。

据我所知,没有Azure存储API直接支持从中断上传文件的功能。但是根据我的经验,您可以尝试实现类似的功能,使用AppendBlob的Append Block API上载文件。

这是从中断上传的逻辑流程的基本步骤。

  1. 通过AppendBlobURL.create创建一个AppendBlob。
  2. 要将数据流切片为一系列要上传的附加块,附加块的切片大小必须小于或等于4MB。
  3. 然后,您可以尝试通过AppendBlobURL.appendBlock逐段上传这些附加块。并且,当您缓存了用于恢复的先前请求/响应数据(包括x-ms-blob-append-offset和内容长度)后,您可以取消当前块的上传进度。
  4. 您可以从上一个缓存的数据恢复上传进度,然后继续通过appendBlock上传下一个,直到完成或再次取消。

希望有帮助。


已更新:

您可以尝试包装要上传的Java代码到javax.swing.SwingWorker的实例中,然后调用SwingWorker.cancel取消它。请从Canceling Background Tasks的子主题Worker Threads and SwingWorker中查看更多详细信息。