【问题标题】:What is the easiest way to get an embedded upload progress bar using Ruby/Sinatra/Haml/Passenger/nginx?使用 Ruby/Sinatra/Haml/Passenger/nginx 获取嵌入式上传进度条的最简单方法是什么?
【发布时间】:2011-01-30 11:12:40
【问题描述】:

我有一个网站,人们可以在一个块中上传 30+mb 的数据,我希望能够向他们展示他们的上传进度,而不会导致网页变得无响应,类似于 flash 上传的工作方式在 gmail 中。

this question here,但我不知道该进度条是否嵌入在页面中,或者它是否正在使用浏览器的进度条。我也是一个网络新手,所以我不确定它是否“最简单”。我问 swfupload 的人如何做到这一点here,我得到的答案是“这个工具需要一些知识才能使用它”,而没有给我太多帮助来弄清楚从哪里开始。我也在ServerFault上问过这个问题,没有得到回应,所以可能是问错地方了。

我很喜欢学习新事物等等,但这里有很多潜在的途径。我应该从哪里开始,我需要知道什么才能使一切都与 sinatra、haml、ruby、passenger 和 nginx 一起工作?

谢谢!

【问题讨论】:

    标签: progress-bar sinatra haml


    【解决方案1】:

    AFAIK,你不能用纯 html/javascript 来做。您必须为此使用一些 Flash 或 Java 或其他任何东西。 Swfupload 是一个不错的选择 - 它会为您提供您需要的东西(我看到它有效),但我记不起细节了。

    【讨论】:

    • 很高兴听到!您建议的库尚未准备好投入生产,至少在我看来(它非常新鲜,cmets 表明存在许多问题,多个文件同时上传而没有排队的可能性,在非常有限的浏览器中运行良好),但它有一个非常好的机会在不久的将来变成非常好的东西。
    • 是的,实际上开发人员已经切换到一个新的实现 (github.com/valums/file-uploader),它对最近的浏览器使用 XHR-only,对旧的浏览器使用通常的 iframe 技巧。不过,它似乎与已建立的服务器模块不太兼容。
    【解决方案2】:

    最简单的解决方案可能是 Flash,但它也是最丑陋的:正如 SWFUpload 论坛上的一些人告诉你的,Linux 上的 Flash 支持有点糟糕,毕竟,如果可以的话,你应该避免使用它。

    因此,下一个解决方案是在客户端使用服务器端模块 + Javascript 的组合。

    注意 我已经在ServerFault上回答了你的部分问题。

    为简单起见,我建议您切换到 Apache 或 Lighttpd。

    服务器端模块 (apache upload progress module/lighttpd mod_uploadprogress) 处理文件上传,并公开一个 API,您可以在 Javascript 中查询以获取当前进度。

    在客户端,您有 2 个选项(如 File Uploader 库所示,除非您还想修改服务器端模块,否则不应使用它):

    • 较新的浏览器允许您在 AJAX 调用中执行和监控上传(请参阅here

    • 几乎所有新旧浏览器都允许您在表单中执行上传,并使用“IFrame 技巧”通过 AJAX 对其进行监控:因为当前正在运行的文件上传会阻止 Javascript 代码运行(因此禁止您要查询服务器并更新进度条),您需要在上传页面中包含一个隐藏的 IFrame,并将表单的操作设置为该 IFrame。这样,“主页”上的 Javascript 代码可以在上传过程中执行。

    对于客户端 Javascript,您可以自己编写,也可以使用现有的库(查看 here)。 您的目标是向服务器查询文件的进度并显示它。如需漂亮的进度条,请查看jqueryUI

    作为最后一点,你可以看看my code,我正在解决同样的问题,我使用了 Ruby/Sinatra/Haml/Passenger/Apache。

    希望有帮助

    【讨论】:

    • 哇,谢谢!我们认为这个项目行不通,所以我们搁置了这个项目,而是转而使用 Java/jnlp 解决方案。问题是,我们的一些客户不允许在他们的机器上安装 Java(我知道,对吗?),所以我们必须重新审视这一点。
    • 完成。这里还有更多字符,因为“完成”太短了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-13
    • 2011-03-06
    • 2011-12-11
    相关资源
    最近更新 更多