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

[web]酷盘这样可以接受浏览器2G文件上传是如何实现的?

  •  
  •   sdpfoue · 2011-10-15 17:31:24 +08:00 · 6437 次点击
    这是一个创建于 4548 天前的主题,其中的信息可能已经有所发展或是发生改变。
    只知道他们用到了swfupload,和自己写的一堆js
    上传过程有进度条和剩余时间估计并且长时间传大文件不超时,这是如何做到的?

    https://www.kanbox.com/
    13 条回复    1970-01-01 08:00:00 +08:00
    sdpfoue
        1
    sdpfoue  
    OP
       2011-10-15 17:33:35 +08:00
    发错结点了,想移动到程序员出现错误:

    Traceback (most recent call last):
    File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/_webapp25.py", line 703, in __call__
    handler.post(*groups)
    File "/base/data/home/apps/v2ex/1.353966803511879293/backstage.py", line 1659, in post
    node_new = GetKindByName('Node', destination)
    File "/base/data/home/apps/v2ex/1.353966803511879293/v2ex/babel/da/__init__.py", line 37, in GetKindByName
    one = memcache.get(K + '::' + str(name))
    UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)
    Paranoid
        2
    Paranoid  
       2011-10-15 19:24:32 +08:00
    没用过酷盘不清楚。

    不过下载的swfupload,demo就直接带有进度条和剩余时间的实例。

    接受2G文件的普通

    1. 后台接受的执行时间的限制 (php 脚本文件)
    2. 服务器端上载文件的限制 (php.ini)
    3. web server 内存限制 (apache 配置文件 httpd.conf)

    或许有其他方法, 等楼下。
    sdpfoue
        3
    sdpfoue  
    OP
       2011-10-15 20:07:15 +08:00
    @Paranoid 感觉这个酷盘的机制不是用post直接传的,改时间再长也会超时,我上传了一个500M的视频用了2个小时。文件限制这个就不说了,肯定是要改的。

    主要就是这个2个小时的上传不超时是怎么搞出来的,怀疑是做了分块。看了下html5 的file api可以操作本地文件,但到IE9都不支持,刚刚测试上传是用的IE6. 实在搞不懂他们是怎么实现的了
    kasuganosora
        4
    kasuganosora  
       2011-10-15 20:09:03 +08:00
    可以看看这个 PHP插件 http://www.ugia.cn/?page_id=74
    Paranoid
        5
    Paranoid  
       2011-10-15 21:20:57 +08:00
    @sdpfoue 例如在 php 中有 set_time_limit ( int $seconds ) 设置,虽然没有试过太长时间,按文档的解释,2小时不是问题。

    http://php.net/manual/en/function.set-time-limit.php

    同感兴趣是否有其他方法。
    Ricepig
        6
    Ricepig  
       2011-10-15 21:39:17 +08:00
    可以上传多块然后服务端自己拼装。
    Livid
        7
    Livid  
    MOD
       2011-10-15 22:42:53 +08:00
    @sdpfoue 移动的时候需要输入的是 node.name,也就是一个 node 在 URL 末尾的那个部分,通常都是半角字母和数字。
    sdpfoue
        8
    sdpfoue  
    OP
       2011-10-16 11:39:04 +08:00
    @kasuganosora 多谢,这个要研究一下

    @Paranoid 之前是想当然了,仔细看了下时间设成0可以长连接

    @Ricepig 浏览器操作本地文件的限制很多,html5的file api可以对本地文件进行读取和分块,但IE10以下不支持。剩下的对本地文件操作的只剩flash和applet一类的东西了吧。可以介绍下具体的思路吗,或者有已经实现了的代码可以参考下的

    @Livid 收到
    holystrike
        9
    holystrike  
       2011-10-16 11:46:22 +08:00 via iPhone
    客户端实现有很多,可以搜索 flash chunk upload
    zxsky1
        10
    zxsky1  
       2011-10-17 11:11:38 +08:00
    @sdpfoue
    你好,经过大家解答之后还有什么疑惑么?
    酷盘工作人员可以替你解答一切疑问。
    :)
    est
        11
    est  
       2011-10-17 11:14:18 +08:00
    2G很正常吧。20G我都传过。长连接那是网速好。要么就用的是swf可以分块。
    sdpfoue
        12
    sdpfoue  
    OP
       2011-10-22 20:07:07 +08:00
    @zxsky1 工作人员居然出现了。看语气就是直接的长连接了?如果真的是长链接实现的话就没什么问题了

    多谢大家
    zxsky1
        13
    zxsky1  
       2011-10-24 12:40:48 +08:00
    @sdpfoue 传输时建立连接,无数据传输则服务器主动断开连接,包括网络断开、出错、传输完成等情况。不是保持长连接。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5212 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 07:21 · PVG 15:21 · LAX 00:21 · JFK 03:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.