V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
jiagm
V2EX  ›  分享发现

百度网盘 Web 端改版支持 HTML5 上传之后出现的严重问题

  •  3
     
  •   jiagm · 2015-12-17 23:14:00 +08:00 · 5835 次点击
    这是一个创建于 3295 天前的主题,其中的信息可能已经有所发展或是发生改变。
    1 、出了什么事?
    本月百度网盘的 Web 端改版,(至少在现代浏览器上)取消了上传控件以及 Flash 上传插件,而是改为 HTML5 上传。
    这带来一个严重的问题:原本通过 Flash 上传插件虽然只能上传小于 1GB 的文件,但是不需要验证 MD5 。而现在强制需要验证 MD5 了。

    2 、这怎么了?
    在上传队列里添加一大堆文件,会同时验证 MD5 ,导致 CPU 占用率 100%,磁盘占用也会剧增。
    这导致录制服务器压力非常大,甚至出现无法正常写入的情况。

    3 、该怎么办?
    暂且不说“恢复 Flash 插件”,但至少请提供一个选择,对于 1GB 以下文件不验证 MD5 。
    我上传的所有文件都不可能在服务器上有,这样不但浪费时间,更导致无法正常使用百度网盘。

    4 、为什么发在这里?
    此问题通过邮件向百度网盘客服( [email protected] )以及我所知道的百度云项目的工作人员的邮箱反映不知道多少次,全部石沉大海。只能发在这了,希望有相关人士看到能转达这帮人。
    如果要与我联系,请发邮件至 [email protected]

    5 、百度网盘还有什么问题?
    此次改版,之前就存在的问题仍然有好几个没有得到解决。
    详见 http://www.jiagm.me/baidupan (问题编号 3~6 )。 2 解决了,其他全部照旧,已经过了一年半(一部分已经两年)。

    --

    另:个人分析涉及的文件部分
    box-static/disk-system-cdn/pkg/plugin-upload_dcd62f6.js
    此文件控制上传模块。 SWFUpload 以及 nativeUploader 这两个部分被注释掉了。

    box-static/disk-system/widget/plugin/uploader/uploadUtil/h5Uploader/_nomd5_nomod_nopack/file.js
    此文件负责将等待上传的文件交给计算 MD5 的 js 。

    box-static/disk-system/widget/plugin/uploader/uploadUtil/h5Uploader/_nomd5_nomod_nopack/spark-md5.js
    此文件负责计算 MD5 。
    27 条回复    2016-06-29 22:35:58 +08:00
    avrillavigne
        1
    avrillavigne  
       2015-12-17 23:33:51 +08:00
    因为楼主博客网址用用火狐和 chrome 浏览器打开都是乱码,所以百毒的人没理
    pynix
        2
    pynix  
       2015-12-17 23:36:17 +08:00
    改版了? 8 秒破了吗?
    7
        3
    7  
       2015-12-17 23:40:52 +08:00
    看了楼主做的动图,这就是爱啊~~
    jiagm
        4
    jiagm  
    OP
       2015-12-17 23:47:30 +08:00
    @avrillavigne 那个页面我只是把邮件原样转载了过去,所以没有声明编码。

    @pynix 毫不相关……

    @7 就这样还不解决呢。
    V69EX
        5
    V69EX  
       2015-12-17 23:51:33 +08:00
    国安队的球迷?刮民档粉?
    jiagm
        6
    jiagm  
    OP
       2015-12-18 00:01:09 +08:00   ❤️ 1
    @V69EX 好多年前的内容了,早就不再更新。
    huangtao728
        7
    huangtao728  
       2015-12-18 00:07:56 +08:00 via Android
    下午在腾讯云的 COS 上传一个 5G+ 的文件,算了好几分钟的 sha1 ,才开始上传,😂😱
    yeyeye
        8
    yeyeye  
       2015-12-18 00:28:22 +08:00
    @avrillavigne chrome 最新版稳定版 不乱码
    binux
        9
    binux  
       2015-12-18 00:44:00 +08:00
    我猜算 md5 还有个作用是检测上传文件正确
    jiagm
        10
    jiagm  
    OP
       2015-12-18 02:06:55 +08:00
    @huangtao728 类似的还有 Dropbox ,上传慢不说(而且是在墙外!),占 CPU 也非常高。

    @yeyeye 已经补上编码的声明了,所以不会乱码。其实之前应该也可以自动识别不会乱码的……

    @binux 其实就是为了它那个秒传。
    Niphor
        11
    Niphor  
       2015-12-18 08:55:56 +08:00
    居然不是用自己厂里的 WebUploader 吗...
    millson
        12
    millson  
       2015-12-18 09:07:53 +08:00
    把 md5 的计算放到客户端,减轻服务器压力?
    BOYPT
        13
    BOYPT  
       2015-12-18 09:14:53 +08:00
    传大文件居然不用客户端都是瞎折腾
    aveline
        14
    aveline  
       2015-12-18 09:39:19 +08:00 via iPhone
    我最近在做视频相关的服务, resumableUpload 是通过一直 append 到服务端的临时文件来做的。上传完成后会检验 MD5 来确认文件是否正确的 …… 不过说实话算个 MD5 也没要多久啊
    Caringor
        15
    Caringor  
       2015-12-18 10:04:37 +08:00 via Android
    其實這樣做可以理解為保險的一步吧,客戶端算一次,然後上傳完畢後服務器端再算一次,校驗文件的完整性。
    wesley
        16
    wesley  
       2015-12-18 10:10:17 +08:00
    @millson html5 断点续传必须要把 md5 计算放在浏览器
    其实百度要做的是把 md5 计算放到一个 worker 而里面,而不是主进程里
    spance
        17
    spance  
       2015-12-18 10:56:39 +08:00   ❤️ 1
    比对 hash 再上传文件这本身就是他的业务核心之一,对于文件传输,在两端分别计算再比对 hash 这是非常合适的逻辑,不让他比 hash 怎么能知道文件是否已经存在、如何确定上传完了的文件是完整的?
    这合适的不能再合适的逻辑,有什么问题?
    hash 计算本身就是高密度计算,你还有并发执行,如果没有 cpu 100%那还真就是程序出问题了。
    你吐槽去掉 Hash 是不明智的,更何况一个程序开始计算任务它并不会考虑此计算机上还有其它计算任务而是不是要让出 cpu 来,所以你需要的就是换换姿势-少量多次逐步操作,视你的机器能力而下达任务。
    jiagm
        18
    jiagm  
    OP
       2015-12-18 11:29:00 +08:00 via Android   ❤️ 1
    @BOYPT 它的客户端一样计算 MD5 ,而且占用 CPUR 和 I/O 更厉害。


    @spance 您没搞清楚问题之所在。问题的关键在于,之前 3 年多在 Web 端上传 1GB 以下文件都是不需要这一个动作,一直用得很好——可以同时开 2 个浏览器共 12 个标签页一起传。现在这样一搞,开一个标签页都不行,因为它的执行效率不是一般的差(客户端计算 MD5 虽然吃 I/O 好歹 CPU 占用不大,这个连 CPU 都大占特占),搞得根本就没法使用。所以,恢复 Flash 插件(做成可选项),或者至少提供一个选项不计算 MD5 ,是有必要而且必须的。
    murusu
        19
    murusu  
       2015-12-18 11:50:29 +08:00
    这个我之前弄过,如果要实现 html5 的断点续传必须得本地 hash ,要不然没法确定文件的状态
    可是记忆中用 woker 来 hash 的话不会导致 cpu 占用 100%的,就是速度慢, 4G 多的东西也得几分钟
    yksoft1
        20
    yksoft1  
       2015-12-18 12:22:34 +08:00
    不过贾哥和我,@flyingharuka 在度盘的大多数文件都有个特点,几乎不可能有第二份
    不过,最近给 @flyingharuka 搞得那个 IS-NITRO-CAPTURE 软件盘镜像居然度盘有,不知是哪个垃圾佬先传的
    顺便说一下,最近雅虎上出现了一台 IS-CGB-EMULATOR 可惜一下子就到了敲诈价。。
    BOYPT
        21
    BOYPT  
       2015-12-18 12:30:03 +08:00
    @jiagm 那站在云盘程序员的角度: 服务器 IO 压力这么大,把计算过程放在客户端好了~
    jiagm
        22
    jiagm  
    OP
       2015-12-18 12:53:14 +08:00
    @BOYPT 抱歉上面回复写错了,应该是“占用 I/O 更厉害”,占用 CPU 没有浏览器折腾得那么厉害。

    @yksoft1 惊动 yk 了。。。
    jiagm
        23
    jiagm  
    OP
       2015-12-18 12:56:30 +08:00
    @BOYPT 不管它在本地是不是进行 MD5 ,上传完成之后它还是会在服务器端算一次的。在本地进行的目的除了上面各位指教的 HTML5 实现断点续传的需要之外,还有一个就是为了秒传。
    kiral
        24
    kiral  
       2016-04-25 01:17:30 +08:00
    续传到不一定用到这个 md5 的值,其实 html5 算上传文件 md5 ,就是为了秒传。我们公司也是这样做的,呵呵。 html5 还可以续传捏,这样就不用插件啦。
    jiagm
        25
    jiagm  
    OP
       2016-04-25 06:32:49 +08:00
    @kiral 您这挖坟挖的……这问题我用土办法自行解决了,不劳烦败毒那帮大爷了。
    kiral
        26
    kiral  
       2016-04-25 21:00:44 +08:00
    @jiagm 土办法能分享一下不?
    mynamejj
        27
    mynamejj  
       2016-06-29 22:35:58 +08:00
    楼主拜托给我你的 qq ,我也在弄这个百度云上传的,跟你抓的包一样,非常需要跟你交流,或者你加我 qq:522483402
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1099 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 18:52 · PVG 02:52 · LAX 10:52 · JFK 13:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.