orzogc / fake115uploader

模拟115网盘客户端的上传功能
GNU General Public License v3.0
256 stars 55 forks source link

超过20G文件上传失败 #67

Open yoshyv opened 5 months ago

yoshyv commented 5 months ago

前一周还能正常上传30G以上的文件(使用 -u),这两天发现20G以上的文件上传会报错。测试 19G 的文件能正常上传。使用 -u 或者 -m 结果一样。

脱敏日志如下

2024/04/09 20:45:50 Cookies的值为:
2024/04/09 20:45:52 userID和userKey的值分别是:
2024/04/09 20:45:53 排序文件夹 0 成功
2024/04/09 20:45:54 秒传模式上传文件:testfile
2024/04/09 20:46:21 initupload的链接是:https://uplb.115.com/4.0/initupload.php?k_ec=
2024/04/09 20:46:21 sig的值是:
2024/04/09 20:46:21 token的值是:
2024/04/09 20:46:21 k_ec的值是:
2024/04/09 20:46:23 秒传模式上传文件 testfile 的响应体的内容是:
{"request":"upload","status":1,"statuscode":0,"statusmsg":"","pickcode":"[redacted]","target":"","version":"4.0","bucket":"fhnfile","object":"","callback":{"callback":"{\"callbackUrl\":\"http:\/\/uplb.115.com\/3.0\/completeupload.php\",\"callbackBody\":\"bucket=${bucket}&object=${object}&size=${size}&sha1=${sha1}&pick_code=${x:pick_code}&user_id=${x:user_id}&behavior_type=${x:behavior_type}&source=${x:source}&target=${x:target}&task_uid=${x:task_uid}\"}","callback_var":"{\"x:pick_code\":\"\",\"x:user_id\":\"\",\"x:behavior_type\":\"0\",\"x:source\":\"5\",\"x:target\":\"U_1_0\",\"x:task_uid\":\"\"}"}}
2024/04/09 20:46:23 秒传模式上传 testfile 失败返回的内容是:
&{Request:upload Status:1 StatusCode:0 StatusMsg: PickCode: Target: Version:4.0 Bucket:fhnfile Object: Callback:{Callback:{"callbackUrl":"http://uplb.115.com/3.0/completeupload.php","callbackBody":"bucket=${bucket}&object=${object}&size=${size}&sha1=${sha1}&pick_code=${x:pick_code}&user_id=${x:user_id}&behavior_type=${x:behavior_type}&source=${x:source}&target=${x:target}&task_uid=${x:task_uid}"} CallbackVar:{"x:pick_code":"","x:user_id":"","x:behavior_type":"0","x:source":"5","x:target":"U_1_0","x:task_uid":""}} SHA1:}
2024/04/09 20:46:23 秒传模式上传 testfile 出现错误:秒传模式上传 testfile 失败
2024/04/09 20:46:23 现在开始使用断点续传模式上传
2024/04/09 20:46:23 断点续传模式上传文件:testfile
2024/04/09 20:46:23 info的值:
{Endpoint:http://oss-cn-shenzhen.aliyuncs.com GetTokenURL:https://uplb.115.com/3.0/gettoken.php}
2024/04/09 20:46:23 OSS token的值:
&{StatusCode:200 AccessKeySecret: SecurityToken: Expiration:2024-04-10T01:46:23Z AccessKeyID: endpoint:http://oss-cn-shenzhen.aliyuncs.com}
按q键停止上传并退出程序,断点续传模式会自动保存上传进度
0 B / 20.09 GiB [____________________________________________________________________________________] 0.00% ? p/s ?2024/04/09 20:46:24 上传 testfile 的第1个分片时出现错误:oss: service returned error: StatusCode=400, ErrorCode=EntityTooLarge, ErrorMessage="Your proposed upload exceeds the maximum allowed size.", RequestId=
2024/04/09 20:46:24 尝试重新上传第1个分片
160.00 KiB / 20.09 GiB [>____________________________________________________________________________] 0.00% ? p/s ?2024/04/09 20:46:24 上传 testfile 的第1个分片时出现错误:oss: service returned error: StatusCode=400, ErrorCode=EntityTooLarge, ErrorMessage="Your proposed upload exceeds the maximum allowed size.", RequestId=
2024/04/09 20:46:24 尝试重新上传第1个分片
320.00 KiB / 20.09 GiB [>_______________________________________________________] 0.00% 533.57 KiB p/s ETA 10h57m58s2024/04/09 20:46:25 上传 testfile 的第1个分片时出现错误:oss: service returned error: StatusCode=400, ErrorCode=EntityTooLarge, ErrorMessage="Your proposed upload exceeds the maximum allowed size.", RequestId=
480.00 KiB / 20.09 GiB [>________________________________________________________________] 0.00% 480.36 KiB p/s 1.2s
2024/04/09 20:46:25 正在保存 testfile 的上传进度,存档文件是 testfile.json
上传成功的文件(0):
上传失败的文件(0):
保存上传进度的文件(1):
testfile

若不开调试级别的话,返回结果是 ossUploadFile() error: oss: service returned error: StatusCode=400, ErrorCode=InvalidArgument, ErrorMessage="Post body size must be less than 5G.", RequestId=

请问此情况是否能复现。最近海外访问 115 变得很慢,不知道是否是阿里云还是哪里的bug?

yoshyv commented 5 months ago

奇怪,重新生成了个不同体积的文件测试。用 -m 可以上传

难道每个上传失败的文件会被记录 sha1,以后无论用 -u 还是 -m 都会上传失败么? 用 -m 失败后服务端会保存多久的上传断点信息呢?等到这个过期后重新上传才行么?

yoshyv commented 5 months ago

测试了几个大体积真实文件。超过30G的文件 前几天能使用 -u 正常上传,现在会上面错。 使用 -m 能正常上传,但是分片设置 2 的情况比 -u 时候上传速度慢很多。

如果使用 -parts-num 1 会一样报错,并且之后使用更多分片也无法上传,会一直报上面一样的错。

请问这个问题能复现么?

orzogc commented 4 months ago

现在我也不用115了,不清楚什么情况

yoshyv commented 4 months ago

能问下你现在用什么替代115么。115这么廉价的空间貌似没有第二家了吧。 pikpak 虽然也挺便宜但是超过10TB以后太贵了。

orzogc commented 4 months ago

能问下你现在用什么替代115么。115这么廉价的空间貌似没有第二家了吧。 pikpak 虽然也挺便宜但是超过10TB以后太贵了。

不清楚,现在我没怎么用网盘了

yoshyv commented 4 months ago
{Endpoint:http://oss-cn-shenzhen.aliyuncs.com GetTokenURL:https://uplb.115.com/3.0/gettoken.php}
2024/04/13 02:16:31 OSS token的值:
&{StatusCode:200 AccessKeySecret: SecurityToken: Expiration:2024-04-13T03:16:30Z AccessKeyID: endpoint:http://oss-cn-shenzhen.aliyuncs.com}
按q键停止上传并退出程序,断点续传模式会自动保存上传进度
0 B / 32.31 GiB [____________________________________________________________________________________] 0.00% ? p/s ?2024/04/13 02:16:31 上传 recording.mp4 的第1个分片时出现错误:oss: service returned error: StatusCode=400, ErrorCode=EntityTooLarge, ErrorMessage="Your proposed upload exceeds the maximum allowed size.", RequestId=
2024/04/13 02:16:31 尝试重新上传第1个分片
160.00 KiB / 32.31 GiB [>_______________________________________________________] 0.00% 266.99 KiB p/s ETA 35h14m49s2024/04/13 02:16:31 上传 recording.mp4 的第1个分片时出现错误:oss: service returned error: StatusCode=400, ErrorCode=EntityTooLarge, ErrorMessage="Your proposed upload exceeds the maximum allowed size.", RequestId=
2024/04/13 02:16:31 尝试重新上传第1个分片
320.00 KiB / 32.31 GiB [>_______________________________________________________] 0.00% 266.99 KiB p/s ETA 35h14m48s2024/04/13 02:16:32 上传 recording.mp4 的第1个分片时出现错误:oss: service returned error: StatusCode=400, ErrorCode=EntityTooLarge, ErrorMessage="Your proposed upload exceeds the maximum allowed size.", RequestId=
480.00 KiB / 32.31 GiB [>________________________________________________________________] 0.00% 440.43 KiB p/s 1.3s
2024/04/13 02:16:32 正在保存 recording.mp4 的上传进度,存档文件是 /home/upload/recording.mp4.json
上传成功的文件(0):
上传失败的文件(0):
保存上传进度的文件(1):
recording.mp4

今天发现上传30多g文件 使用 -m 多分片上传时候也会同样报错了。可能报错和具体文件相关?并不一定只是文件体积大?

不知道有没其他用户最近遇到这个问题。


更新:测试 fallocate 生成文件,30多g也直接报错。不知道大体积文件还有什么上传办法没了 16多G的文件确认可以 -u 上传。 推测 -u 的上限 20G。

2024/04/12 22:49:34 秒传模式上传文件 RC-Apr_12.mp4 的响应体的内容是:
{"request":"upload","status":1,"statuscode":0,"statusmsg":"","pickcode":"","target":"","version":"4.0","bucket":"fhnfile","object":"","callback":{"callback":"{\"callbackUrl\":\"http:\/\/uplb.115.com\/3.0\/completeupload.php\",\"callbackBody\":\"bucket=${bucket}&object=${object}&size=${size}&sha1=${sha1}&pick_code=${x:pick_code}&user_id=${x:user_id}&behavior_type=${x:behavior_type}&source=${x:source}&target=${x:target}&task_uid=${x:task_uid}\"}","callback_var":"{\"x:pick_code\":\"\",\"x:user_id\":\"\",\"x:behavior_type\":\"0\",\"x:source\":\"5\",\"x:target\":\"U_1_0\",\"x:task_uid\":\"\"}"}}
2024/04/12 22:49:34 秒传模式上传 RC-Apr_12.mp4 失败返回的内容是:
&{Request:upload Status:1 StatusCode:0 StatusMsg: PickCode: Target: Version:4.0 Bucket:fhnfile Object: Callback:{Callback:{"callbackUrl":"http://uplb.115.com/3.0/completeupload.php","callbackBody":"bucket=${bucket}&object=${object}&size=${size}&sha1=${sha1}&pick_code=${x:pick_code}&user_id=${x:user_id}&behavior_type=${x:behavior_type}&source=${x:source}&target=${x:target}&task_uid=${x:task_uid}"} CallbackVar:{"x:pick_code":"","x:user_id":"","x:behavior_type":"0","x:source":"5","x:target":"U_1_0","x:task_uid":""}} SHA1:}
2024/04/12 22:49:34 秒传模式上传 RC-Apr_12.mp4 出现错误:秒传模式上传 RC-Apr_12.mp4 失败
2024/04/12 22:49:34 现在开始使用普通模式上传 RC-Apr_12.mp4
2024/04/12 22:49:34 普通模式上传文件:RC-Apr_12.mp4
2024/04/12 22:49:34 info的值:
{Endpoint:http://oss-cn-shenzhen.aliyuncs.com GetTokenURL:https://uplb.115.com/3.0/gettoken.php}
2024/04/12 22:49:34 OSS token的值:
&{StatusCode:200 AccessKeySecret: Expiration:2024-04-13T03:49:34Z AccessKeyID: endpoint:http://oss-cn-shenzhen.aliyuncs.com}
按q键停止上传并退出程序
1.52 GiB / 16.83 GiB [----->_________________________________________________________] 9.02% 31.50 MiB p/s ETA 8m17s

再更:重新生成更大体积的随机文件。使用-m,增加 -parts-num 的值到20后可以正常上传。但是之前的出错文件无论怎么提高分片数,删除保存进度文件短期内均没法上传。不知道多久后能重新上传该文件(3天前OP里出错的文件,现在可以上传了=最多等3天?) 推测现在分片数要根据文件体积增加。目前不知道具体每增加多少GB需增加一个分片才能正常上传(不会触发短期无法上传问题)。根据前几天非 -v 报错,最大 post 体积 5G,是否可以推测每5G需要加1分片(待验证?)

同时发现 -m -parts-num 1 比 -u 要慢很多。(国外网络环境测试)5分片才能和 -u 速度相当。 想请教下懂阿里云oss的大佬们 -m 比 -u 慢的原因。 此外,5分片同时上传2个文件速度比单文件10片段上传速度要高一倍,说明5分片未吃满上传速度上限。为什么10分片单文件怎么没法达到2个5分片上传速度呢? 最后希望有知道内幕的大佬透露下最近这个限制是何时开始的?是阿里云oss的限制还是115本身的限制,如果是后者的话会不会说明115本身资金不够了 - -

orzogc commented 4 months ago

非要设置分片吗?正常情况是会自动分片的

yoshyv commented 4 months ago

请问非要设置分片是什么意思?自动分片是只要 -m 就行吗? 最初发现大文件上传失败(且短时间完全无法上传同一文件)时候好像就是单独 -m 触发的。 -u 发现无法上传 20多G文件后改用 -m 没有添加分片后失败了。

并且上传小文件时,如果单独 -m 不设置 -parts-num 到5以上,我这会比 -u 要慢上很多(上传速度显示也不正确)

orzogc commented 4 months ago

分片就是OSS上传时将单个文件分成多个小文件上传而已

yoshyv commented 4 months ago

所以绕过了单文件体积限制咯。 不过为什么-m 只有一个分片时候比 -u要慢很多?

orzogc commented 4 months ago

所以绕过了单文件体积限制咯。

没绕过

不过为什么-m 只有一个分片时候比 -u要慢很多?

不清楚

yoshyv commented 4 months ago

使用 -u 没法上传 20G 以上文件了,测试了很多次都是一样报错。 另外 30G 以上文件使用5个分片也会出错。只有分片数大于体积/5才能正常上传。 都是前几天测试的结果了。

lloyd18 commented 4 months ago

大文件为什么要用 -u ,搞不懂你,24日 -m 正常上传33G文件,问题关了吧