0

我需要实现一个部署管道,在管道的最后,我们正在上传一个文件,在这种情况下,是上传到华为的应用商店。但是对于大小超过 5 兆字节的文件,我们必须使用分块 API。我不熟悉分块上传的工作原理。有人可以给我一个实现指南,最好是在java中如何实现这种机制?API参数如下:

在此处输入图像描述

编辑:作为对下面评论的回应,让我澄清我的问题。查找有关如何执行分块请求的一些参考资料,诸如 httpclient 和 okhttp 之类的库只是将块标志设置为 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 兆字节。然后我想我可以尝试使用 multipart/form-data 为每个块调用 API。但是服务器端总是在开始写入之前关闭连接,导致:Connection reset by peer: socket write error。

它不应该是代理问题,因为我已经设置了它,我可以毫无问题地获取令牌、url 和身份验证代码。

4

1 回答 1

0
  1. 文件分割:将超过几G的文件上传到服务器。如果只能用最简单的上传、接收、处理并成功,我只能说你的服务器非常好。即使服务器足够好,也不允许这种操作。所以我们必须想办法解决这个问题。

首先,我们要解决大文件的问题。没有办法将它们切成几m字节,多次发送到服务器并保存。然后用 MD5 + 源文件的索引来命名这些文件。当然也有朋友用UUID+index来命名。下面将详细介绍两者的区别。当你将这些小文件单独上传到服务器时,最好将这些记录保存到数据库中。

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

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

  1. 二传功能:很多网盘都实现了这个功能。上传开始时,发送Ajax请求来查询要上传的文件是否存在。这里H5提供了获取MD5文件的方法,然后通过ajax请求文件中是否存在MD5以及状态是否完成。如果存在,还要验证本地文件是否仍然存在。在同时存在的情况下。您可以将出席状态返回给前台,然后您可以自豪地告诉客户,秒过去了。这是链接: https ://blog.csdn.net/weixin_42584752/article/details/80873376
于 2020-05-28T07:23:50.263 回答