七牛的云存储里有一个 18G 的文件,下载报错,七牛客服提供了多种技术方案,搞了一周,依旧下载不下来。现在又让我从第一个方案开始从头体验一遍“七牛测试工程师”了

2019-01-15 17:03:33 +08:00
 jackon

关于要不要发这篇文章,纠结了很久。既然写了,还是发出来吧。

通过朋友把问题反馈给了对应的团队,客服刚刚也打电话给我解释具体问题了。 处理的蛮好的。

听朋友讲过许式伟早期创业的一些故事,蛮佩服的。 这或许也是我成为七牛忠实用户的主要原因之一吧。

前不久,换了其他云存储。有点不舍得。

希望七牛团队可以保持优秀,甚至再搞点牛逼的技术产品出来。


直接贴沟通记录了,有点长。

下载同一个 bucket 下的小文件,成功。

下载大文件,失败,

$ wget http://data.xxx.me/xxx.bson.tar

--2019-01-07 17:57:41--  http://data.xxx.me/xxx.bson.tar

Resolving data.xxx.me... 58.xxx.xxx.29

Connecting to data.xxx.me|58.xxx.xxx.29|:80... connected.

HTTP request sent, awaiting response... 403 Forbidden

2019-01-07 17:57:42 ERROR 403: Forbidden.

收到回复

您好,

文件过大可能会由于网络波动等原因造成下载失败,

建议您使用 qshell 工具进行下载:

https://developer.qiniu.com/kodo/tools/1302/qshell ;

https://github.com/qiniu/qshell/blob/master/docs/get.md

报错是 403 Forbidden,必现。客服却解释为网络波动等原因。 不过,只要能解决问题就行了。可能客服也不懂技术,不难为他们了。

看 qshell 工具文档,没找到断点续传的功能。公网传输 18G 文件,还不能断点续传。 自研工具相对于 wget 的优势是什么?

试了一下,不报 403 了。看来还是有点厉害的。

下载了一周,根本无法完整下载。最大的两次,下载了 10G。 关键是,下载不完整,根本没有报错。 自己检查文件大小才发现的错误。

自研工具的优势,大概就是绕过检测,出错不报错。假装成功。

猜测,七牛大概是出于防 DDOS /流量攻击等的考虑,限制了单个请求的最大传输流量。wget 的时候,服务器先检测文件大小,所以返回 403. 自研的工具,绕过了前面的检测,但传输到一定量的时候,可能是 bug,也可能是触发了安全机制,传输会中断在 10G 流量左右。推测,从七牛上不可能完整下载大于 10G 的单个文件。

对于七牛客服给的坑爹解决方案,我是很生气的。

qshell 下载,由断点续传的功能么?下载了几天了,没有一次下载完整的。最多只能一次下载 10G

体验太差了。

客服让我用 qshell 工具的 qdownload

qshell 工具的 qdownload 命令是支持单个文件断点续传的,qdownload 使用文档如下:

https://github.com/qiniu/qshell/blob/master/docs/qdownload.md

你尝试按照文档要求的搁置配置参数进行下载。文档中提到的下载配置文件 <LocalDownloadConfig> 是需要您自己创建并设置的。

根据文档搞好了配置文件,下载报错 403,我误以为是配置不对导致 URL 中的 '/' 存在转义问题。

贴了完整的配置文件和日志给客服。

Download xxx.bson.tar failed by url http://data.xxx.me/xxx%2Fxxx.bson.tar?e=155003xxxxxxxNo8SfwGM= 403 Forbidden

怎么避免 url 中的 / 被转义?

$ cat config.json
{
    "dest_dir"   :   "/Users/xxx/Downloads/qshell-v2.3.5/data",
    "bucket"     :   "big-data",
    "prefix"     :   "xxx%2Fxxx.bson",
    "suffixes"   :   ".tar",
    "cdn_domain" :   "http://data.xxx.me",
    "referer"    :   "",
    "log_file"   :   "download.log",
    "log_level"  :   "info",
    "log_rotate" :   1,
    "log_stdout" :   false
}

客服竟然真的指出我 prefix 字段配置的 '/' 不对:

核对下前缀 prefix 的正确格式。

文档中前缀格式是以 / 结尾的:

xxx (认真的文档截图)

另外,您仔细确认下前缀的概念:

你想设置的前缀,正确格式可能要在最后加个斜线 /

翻译成普通话大概就是,你这个用户不行,文档里虽然没写,但例子中的前缀以 '/' 结尾,你竟然配成了一个文件的 basename。

于是,我挑了一大一小 2 个文件,加了 'sync/' 前缀,努力做一个正确的用户。

小文件下载成功,大文件依旧报错 403.

很明显:

  1. qdownload 跟 wget 一样,无法下载 18G 的文件。
  2. 目测,qdownload 的设计初衷是同步一个目录,客服所谓的断点续传,大概是已经下载过的文件不会重复下载。
  3. 如果 qdownload 支持同一个文件的断点续传,get 命令没道理阉割掉。
  4. get 可以下载,只是不完整。qdownload 直接报 403,也是一个谜。可能背后是两套实现机制。

我问客服:

我只需要下载一个文件,怎么配?

客服说:

下载单个文件使用 get 命令即可:

https://github.com/qiniu/qshell/blob/master/docs/get.md

例如:

qshell get <Bucket> <Key> [-o <OutFile>]


其中,

bucket 写资源所在的空间名;

key 写资源在七牛空间的名字

-o <Outfile> 可选项,是下载后保存在本地的名字。

回复的很认真,但是,绕回到老方案上,就尴尬了。

你先看看这个工单的历史记录再回复。

不知道我的理解能力太差,还是你们的产品/文档有问题,

从云存储下载一个大文件,竟然前前后后搞了一个星期了,又回到了原点。

请提供一个你们测试过并且确认可用的解决方案。

然后收到客服的回复, 他们真的就去下载我的文件做测试了。。。

很多人可能猜到了,我已经加了 'sync/' 前缀测试 qdownload 命令了。 原来的 URL 访问,肯定 404.

赶紧回复:

请不要用我的文件做测试,这是内部数据。

客服又跟我确认,那个文件还在不在,我回复,文件已删除。

客服回复:

您好,

如果文件已经删除,是无法下载的。

如果是正常存储在七牛,没有被删除的文件,您可以使用 qshell 的 get 命令下载该文件.

https://github.com/qiniu/qshell/blob/master/docs/get.md

内伤,聊不动了。

6014 次点击
所在节点    程序员
31 条回复
xnode
2019-01-15 17:09:27 +08:00
......
liprais
2019-01-15 17:14:35 +08:00
国内做云的都是菜鸡
LGA1150
2019-01-15 17:15:57 +08:00
kakudesu
2019-01-15 17:24:48 +08:00
2333
52coder
2019-01-15 17:26:33 +08:00
之前用七牛做免费图床,帮他们推荐了 20 多个人注册,后面测试域名突然收回,图片还下载不下来,最后用了那个命令行工具,写了个 shell 脚本,七牛是真的坑。
GDC
2019-01-15 17:31:17 +08:00
令人捉急… 这逻辑太沙雕了
niuer
2019-01-15 17:38:01 +08:00
您好:关于您的问题,首先这边表示抱歉没有定位您的需求。七牛这边是支持断点续下载的,用 wget -c -t 0 即可;再次对给您造成的困扰表示抱歉。
niceworld
2019-01-15 17:40:04 +08:00
测试域名每日限流 10g 的原因?
misaka19000
2019-01-15 17:42:39 +08:00
@niuer #7 wget 不是 403 了吗
saluton
2019-01-15 17:57:27 +08:00
@misaka19000 233333
ioven
2019-01-15 18:02:54 +08:00
瞎猜

wget 用 qshell 的 useragent 能不能绕过检测?
zeraba
2019-01-15 18:38:29 +08:00
https://developer.qiniu.com/fusion/kb/1319/test-domain-access-restriction-rules
测试域名每日限制 10G
可以绑定一个自己的域名解决呗? 这个 403 不太友好,应该可以用 lua 返回一句友好提示
zeraba
2019-01-15 18:46:29 +08:00
@niuer 他下载小文件没有问题,大文件出现了问题,如果是网络波动不会是 403,应该是直接连接断开了,再结合你们的文档测试域名的每日 10G 流量限制和他描述的最大只能下载 10G 应该可以定位问题了?
dapang1221
2019-01-15 19:13:04 +08:00
笑死我了,从根源解决问题,下载不动怎么办,让用户把文件删了就行了
V2exUser
2019-01-15 19:18:26 +08:00
换个 win 系统试试
zsan6
2019-01-15 19:26:51 +08:00
就凭他的测试域名的坑,就得被人骂死。。。LESE
Mohanson
2019-01-15 19:54:55 +08:00
重启下电脑
xiangyuecn
2019-01-15 20:27:02 +08:00
挺好奇把这十几 G 的单个文件传上去的动机。。。不知道七牛有没有这种:寄堆硬盘过去把我的数据拷出来的服务
pathbox
2019-01-15 21:04:20 +08:00
也就是可以传的上去,但现在下不下来了额?
chaosjohn
2019-01-15 21:26:55 +08:00
@xiangyuecn 有,当时我就是寄了两块 8T 的盘到七牛的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/527297

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX