gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 18:39:00 25 4
gpt4 key购买 nike

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

enter image description here

编辑:在下面的评论中,让我澄清我的问题。查找有关如何执行分块请求的一些引用,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 的输入参数似乎期望我手动管理 block ,因为它期望 ChunkSize 和序列号。我想我可能需要使用普通的 java http 接口(interface)来使用 API,但我未能找到任何好的来源来帮助我开始。如果有人能给我一个引用或实现指南,那肯定会有帮助。

更多更新:我尝试手动将文件分成几个部分,每个部分大小为 1 MB。然后我想我可以尝试使用 multipart/form-data 为每个 block 调用 API。但服务器端总是在写入开始之前就关闭连接,导致:Connection Reset by Peer:socket write error。

这不应该是代理问题,因为我已经设置了它,并且我可以毫无问题地获取 token 、url 和授权码。

最佳答案

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

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

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

(2) 每个区 block 上传后,记录都会保存在数据库中。源文件的MD5+索引名、 block 的MD5(这是一个关键点)、上传时间和文件地址。保存到数据库并命名为file__TEM table

  • 第二传输功能:很多网盘都实现了该功能。上传开始时,发送Ajax请求查询要上传的文件是否存在。这里H5提供了获取MD5文件的方法,然后使用ajax请求文件中是否存在MD5以及状态是否完成。如果存在,还要验证本地文件是否仍然存在。同时存在的情况下。您可以将在线状态返回给前台,然后您可以自豪地告诉客户,几秒钟过去了。链接在这里: https://blog.csdn.net/weixin_42584752/article/details/80873376
  • 关于java - 如何使用Java实现华为分块文件上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59981801/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com