【问题标题】:Best non-flash upload component for web applications?Web 应用程序的最佳非 Flash 上传组件?
【发布时间】:2010-12-12 14:57:43
【问题描述】:

我想要关于上传脚本/组件的建议。我的标准:

  • 没有闪光灯
  • 纯 Javascript 可以,jquery 可以
  • 必须提供进度条(从例如 ajax 调用更新)。

可能不相关,但我在服务器端使用 ASP.NET MVC。

谢谢

更新 是的,我知道这需要一个服务器端组件,但我可以提供。我对客户端脚本更感兴趣。 (也许一些解决方案会与他们的服务器端实现相关联 - 我不知道)

只是为了澄清 - 它不必是特定于 .net 的。我很乐意使用仅附带(例如)PHP 服务器端脚本的组件,并为 .net 推出我自己的组件。


感谢所有答案 - 那里有一些非常有用的信息。最后我接受了“AJAX 上传器”——它不符合进度条的要求,但似乎没有什么可能(至少没有 Flash)。我想我也会根据这里的一些信息研究创建自己的可能性 - 如果我有任何运气,我会回复。

【问题讨论】:

    标签: javascript jquery upload


    【解决方案1】:

    Fine Uploader我们用这个,还不错,值得一试。

    编辑:出于某种原因,我认为我们使用了 Uploadify,结果是这样的。

    【讨论】:

    • 我没看过那个,谢谢。虽然它似乎没有提供任何进度轮询。
    • 那个没有进度条,这是要求之一。
    • 你可以在 ajax 上传器中挂上一个进度条,它似乎没有任何好的文档。
    • 看起来现在称为Fine Uploader?而且要花钱..
    • 商业许可只需要付费,在 GPLv3 下仍然可用。
    【解决方案2】:

    服务器端技术与您尝试做的事情非常相关。这类事情需要服务器交互。

    我不知道任何现成的组件,但这个article 可能会有所帮助。

    根据您的更新,您似乎正在寻找绑定到特定服务器技术的客户端组件,并且确信您可以轻松地将其转换为 .NET。在我看来,这并不容易。要实现进度条,您需要一个文件上传侦听器。在 Java 中,我很幸运地使用Apache Commons FileUpload 和实现ProgressListener 接口做了类似的事情。基本上我已经按照article 的说明进行操作。除了进度监听器,我还需要实现一个 servlet,它返回当前上传的百分比,并在客户端使用进度条 jQuery 插件,我通过 Ajax 调用百分比 servlet 定期更新它。这些是简单的部分。正如我所评论的,您可以立即轻松地自己实现它们。

    困难的部分是进度监听,这有很大不同,具体取决于服务器技术。所以我建议你从那里开始。了解如何收听使用 ASP.Net MVC 上传的文件的进度。上面链接的文章是一个很好的起点。

    【讨论】:

    • 是的,我当然意识到需要进行服务器端集成。我有兴趣查找预先创建的客户端内容 - 脚本并不关心生成 JSON 响应的内容。
    • 那就从找一个合适的进度条插件开始吧。您将需要少于 10 行 jQuery 代码来使其从 JSON 响应中更新。即使您确实找到了现成的插件,使其满足您的需求所需的配置代码也一样大。
    • 嗯,是的,我知道我可以自己做这一切,但我想看看有没有现成的东西。因此提出了这个问题。
    • 所有现成的东西都带有服务器端集成。正如 kgiannakakis 所提到的,将现成的东西与您的服务器集成将比简单地自己编写需要更长的时间,而且如果您自己编写它会看起来更好。
    【解决方案3】:

    我们已经在一个内部项目中使用过这个,我认为不能满足您对非 Flash 进度显示的标准。基于 Flash 的上传器如此受欢迎的原因是 JavaScript 在客户端 Web 浏览器上受到极大限制:出于安全原因,JavaScript 无法访问客户端硬盘驱动器上的任何文件(因此在上传之前不会检查文件长度,也不会读取块要上传的文件本身),它可以操纵<input type='file'> 控件的程度非常有限(否则它可以在用户不知情的情况下自行选择和上传文件),并且它只能将文件作为全或-没有 POST 的表单提交(所以没有进度报告)。

    即使您可以解决这些客户端问题,据我所知,任何通用 Web 服务器都会等到它收到整个 POST 文件上传后,才会将其传递到服务器端 Web 应用程序,因此服务器端组件在接收每个块时没有机会更新状态。

    看起来像AJAX Upload 这样的东西是你能做的最好的。

    【讨论】:

    • 感谢您分享您的经验。
    【解决方案4】:

    大多数 JavaScript 实现中的 Flash 上传组件都存在,因为它们提供了更多关于文件及其上传的信息。它允许您不断地为进度条提供事件框架。最受欢迎的当然是http://swfupload.org/

    Flash 可以在上传实际开始之前访问文件信息。使用纯 JavaScript 解决方案,您只能访问服务器上文件流的长度,直到整个文件被完整接收并保存到服务器硬盘。

    以下非常古老的经典 ASP 脚本提供了一个文件,您的 javascript 可以轮询该文件,其中包含到目前为止在服务器上收到的已完成上传的百分比。

    http://www.freeaspupload.net/

    它并不优雅,它只是做得很好。我还没有看到更现代的 .net 版本。

    【讨论】:

    • 只是为了澄清 - 它不一定是 .net 特定的。我很高兴使用仅附带(例如)PHP 服务器端脚本的组件,并为 .net 推出我自己的组件。
    • 我们也使用 swfupload。我还没有看到没有 Flash / Java 的 doign 进度条的方法,但我很乐意学习其他方法 :) ;我怀疑服务器实际上会在整个文件被 POST 之前做出反应,因此无法报告上传期间收到的 %age - 而我相信 Flash 会根据 %age SENT 执行进度条客户端而不是收到)。解构 multi=part mime 的服务器端部分对于 IME 来说也很痛苦(与字节/Unicode 转换有关)
    • 关于如何在没有 Flash 的情况下执行此操作的基本摘要需要在上传期间与客户端进行更多通信。服务器在流式传输时以块的形式处理上传数据,在每个块之后,它将所知道的关于上传数据的所有信息写入客户端查询字符串指定的文件中。反过来,当客户端将发布的文件发送到服务器时,它可以反复轮询信息文件,直到它指示服务器已收到所有内容。使用流长度和处理长度,我们可以计算出 CSS 或 JavaScript 进度条的百分比。
    • 很有趣,我会研究一下这个 - 太棒了。
    【解决方案5】:

    使用 PHP 的 APC 模块可以获得上传进度。这是一篇关于如何设置的不错的文章。

    http://www.haughin.com/2007/10/23/php-upload-progress-with-php-52-apc/

    显然这需要 PHP,但如果这对你来说是可能的,那么你就准备好了。

    【讨论】:

      【解决方案6】:

      尝试AsyncFileUpload 用于 asp.net Web 应用程序。

      【讨论】:

      • 我之前没有使用过 ASP.NET Ajax 库。不幸的是,该网站上的演示似乎无法正常工作。不过看总结,好像不支持轮询。
      【解决方案7】:

      你根本没有提到价格要求,所以我会把 Telerik 控件扔在那里。我用过它,它很容易实现。它们具有服务器端和客户端 API、进度条、客户端验证,并且支持 Ajax。

      演示站点: http://demos.telerik.com/aspnet-ajax/upload/examples/overview/defaultcs.aspx

      【讨论】:

        【解决方案8】:

        我认为没有符合您要求的组件,因为据我所知,每个提供进度条的解决方案都是基于 Flash 的。 ;)

        但是,像 TWith2Sugars 我用过AjaxUpload,效果很好,但没有进度条。

        【讨论】:

        • 有可用的服务器端组件,操作员认为这些组件是必需的。您是正确的,除了 flash、silverlight 或类似的浏览器插件之外,没有其他可用的客户端选项。
        猜你喜欢
        • 1970-01-01
        • 2011-02-12
        • 1970-01-01
        • 2010-12-07
        • 1970-01-01
        • 1970-01-01
        • 2011-02-18
        • 2011-01-21
        • 2011-03-17
        相关资源
        最近更新 更多