关于要不要发这篇文章,纠结了很久。既然写了,还是发出来吧。
通过朋友把问题反馈给了对应的团队,客服刚刚也打电话给我解释具体问题了。 处理的蛮好的。
听朋友讲过许式伟早期创业的一些故事,蛮佩服的。 这或许也是我成为七牛忠实用户的主要原因之一吧。
前不久,换了其他云存储。有点不舍得。
希望七牛团队可以保持优秀,甚至再搞点牛逼的技术产品出来。
直接贴沟通记录了,有点长。
下载同一个 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.
很明显:
我问客服:
我只需要下载一个文件,怎么配?
客服说:
下载单个文件使用 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
内伤,聊不动了。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.