如何使用Java实现华为的分块文件上传

2020年5月7日 23点热度 0条评论

我需要实现一个部署管道,在管道的最后,我们正在将文件上传到华为的应用商店。但是对于大小超过5 MB的文件,我们必须使用分块API。我不了解分块上传的工作方式。谁能给我一个实施指南,最好是在java中如何实现这种机制? API参数如下:

编辑:
作为对下面评论的回应,让我澄清我的问题。在查找有关如何执行分块请求的参考时,诸如httpclient和okhttp之类的库只是将chunk标志设置为true,似乎对库的客户端隐藏了详细信息:

https://www.java-tips.org/other-api-tips-100035/147-httpclient/1359-how-to-use-unbuffered-chunk-encoded-post-request.html

但是,API的输入参数似乎期望我手动管理块,因为它期望ChunkSize和序列号。我在想可能需要使用简单的Java http接口来使用API​​,但是我找不到任何好的资源来帮助我入门。如果有人可以给我参考或实施指导,那肯定会有所帮助。

更多更新:
我尝试将文件手动分成几个部分,每个部分1 MB。然后我想我可以尝试使用multipart / form-data为每个块调用API。但是服务器端始终在写入甚至开始之前就关闭连接,这导致:对等方重置连接:套接字写入错误。

因为已经设置好了,所以它不应该是代理问题,而且我可以毫无问题地获得令牌,URL和身份验证代码。

解决方案如下:

文件分段:将大小超过几GB的文件上载到服务器。如果您只能使用最简单的上载,接收,处理和成功操作,那么我只能说您的服务器非常出色。即使服务器足够好,也不允许此操作。因此,我们必须找到一种解决此问题的方法。

首先,我们必须解决大文件的问题。无法将它们切成几m字节并将它们多次发送到服务器并保存。然后用源文件的MD5 +索引命名这些文件。当然,有些朋友使用UUID +索引来命名。下文将详细描述两者之间的差异。当您将这些小文件分别上传到服务器时,最好将这些记录保存到数据库中。

(1)第一个块上传完成后,将源文件的名称,类型,MD5,上传日期,地址和未完成状态写到表中,并将拼接完成状态更改为完成。临时命名文件表

(2)每次块上传后,记录将保存在数据库中。源文件的MD5 +索引名称,块的MD5(这是关键点),上传时间和文件地址。保存到数据库中并命名为文件__ TEM表

二次传输功能:许多在线磁盘都可以实现此功能。在开始上传时,发送Ajax请求以查询是否存在要上传的文件。在此,H5提供了一种获取MD5文件的方法,然后使用ajax请求该文件中是否存在MD5以及状态是否已完成。如果存在,还请验证本地文件是否仍然存在。在同时存在的情况下。您可以将状态返回给前台,然后您可以自豪地告诉客户过去的秒数。
链接在这里:
https://blog.csdn.net/weixin_42584752/article/details/80873376