【问题标题】:Webpage: accessing local file of the client / Alternatives to Silverlight / Java Applets网页:访问客户端的本地文件/Silverlight 的替代方案/Java 小程序
【发布时间】:2014-04-28 06:04:04
【问题描述】:

我们有以下要求: 我们网站的用户应该能够将数据从他们的手持扫描仪上传到我们的网站。

扫描仪映射到 PC 上的本地驱动器。编写 .NET 程序并从他们的设备访问文件并将这些文件发送到 Web 服务非常容易。

我们的用户希望直接从网页中获得此信息。他们点击一个按钮,(网站的)一个组件从设备读取数据并将其发送到服务器。

我知道这些技术应该可以实现: * Java 小程序 * 微软银光 * 编写一个富客户端程序,将其发送到我们的网络服务(用户希望摆脱这种情况)

好吧,它们看起来都不太吸引人(Silverlight 是不是已经死了?),所以我想知道是否有任何其他技术可用于从网页访问客户端上的本地文件?

【问题讨论】:

    标签: java silverlight applet


    【解决方案1】:

    这是一个反复出现的问题。我已经尝试了上面提到的一些替代方案,它们或多或少都可以工作。

    对我来说,作为一名 Java 开发人员,使用 JavaFX 小程序似乎是最好的选择。我所做的不是创建一个仍然如此繁重且难以与网页设计集成的可视化小程序。但相反,我创建了一个 1px 的小程序,它可以导出 javascript 特权函数。 http://docs.oracle.com/javase/tutorial/deployment/applet/invokingAppletMethodsFromJavaScript.html

    无论如何,您必须使用有效的 CA 对小程序进行签名,即使这样,您仍然会遇到一些用户问题,由于 java 未更新而出现烦人的消息,安装 jre 32 位但使用 64 位浏览器,某些防病毒软件会产生小程序故障等。 ..

    你也可以使用这个框架为firefox、chrome和IE创建一个插件http://www.firebreath.org/display/documentation/FireBreath+Home安装对用户来说几乎是透明的,除了安装浏览器之外不需要任何东西。缺点是你需要在 C++ 中实现它,所以跨平台插件取决于你,当然你需要为你想要支持的每个操作系统编译一个版本。 Firebreath 提供了一些在专业 SO 中支持的公共 API。

    在某些(不是全部)情况下有用的其他选项:您可以创建一个可以执行特权工作的系统托盘桌面应用程序。该应用程序可以启动一个绑定在 localhost 界面中的微型 Web 服务器,浏览器可以使用跨域 ajax 调用与系统托盘应用程序通信并向 Web 应用程序发送指令和更新。

    无论如何,请谨慎实施此类解决方案,这需要付出一些努力才能为用户提供良好的体验。

    【讨论】:

    • 值得注意的是,如果您通过 javascript 访问小程序,小程序将自动运行,就好像它是沙盒一样。对于那些尝试通过可以从客户端本地文件系统读取的 javascript 与隐藏的苹果接口的解决方案的人来说,这可能是一个陷阱。
    • 另外值得注意的是,如果您从 https 网站调用它,创建运行服务器的系统托盘桌面应用程序会带来各种痛苦。
    【解决方案2】:

    由于您似乎对最终用户的环境有相当大的控制权,并且能够让他们在桌面上安装软件,因此我会考虑注册一个自定义 HTTP 方案来调用您的 .NET 可执行文件来完成这项工作。使用几个注册表项注册custom URI scheme 相对简单。如果您像该文章的示例那样注册为打开/命令,浏览器将调用您注册的 .EXE,并将 URL 的其余部分作为您的命令行参数,然后您的程序可以执行该工作。

    这种机制的一个好处是它可以在主要浏览器上运行,而无需编写特定于浏览器的代码(插件等)。从您的角度来看,这有点令人费解,因为您将让用户调用外部程序,让它完成工作,然后您需要在您的页面上检测(ajax 回到您的服务器?)工作已经完成,并允许用户继续前进。但是因为您可以通过自定义 URI 将大量数据传递给您的程序,所以该过程对于您的最终用户来说可能“感觉”相对无缝,并且不需要太多额外的交互,假设他们安装了 custom-scheme-handler。

    不过,一个缺点是(据我所知)检测您的 URI 方案处理程序是否安装在最终用户的系统上并非完全简单地通过您的 Web 应用程序以跨浏览器的方式进行。如果您在服务器端检测到帮助应用程序尚未启动且无法正常工作,您可能不得不让调用失败并弹出安装说明。

    尽管这并不完美,但我的经验是,最终用户运行已签名的 Java 小程序变得越来越困难。浏览器供应商正在阻止 Java 或旧版本的 Java,或者创建大量安全警告,或者 Sun 正在更改规则并要求您将内容添加到您的 .JAR 清单中,或者热心的防火墙只是在网络上完全阻止已签名的 .JAR层,因为它们可能是恶意软件等。如果你走 Java 路线,你会发现跟上它很麻烦。

    【讨论】:

    • 感谢您的想法 - 我想我要走 Java Applet 路线,但这是我没有想到的解决方案。
    【解决方案3】:

    Chrome 上的另一种选择是开发原生消息应用程序或扩展程序,通过标准输入和标准输出与用户计算机上的原生应用程序通信。

    【讨论】:

    【解决方案4】:

    JavaFX 是某种 Java Applet 的下一步(或多个步骤),它可能会有所帮助。 Here 是官方的 JavaFX 概述。

    【讨论】:

      【解决方案5】:

      出于安全/隐私原因,不允许 Web 应用访问客户端的文件系统。用户是必须启动文件传输(上传)的人。

      HTML5 File API 也无法使用,因为您的 web 应用只能在其自己的 sandbox 内播放。

      Mozilla Firefox add-on 或许可以做到,但您的用户必须使用 Firefox。不知道谷歌浏览器扩展能不能做到。

      签名小程序的唯一浏览器兼容方式 - 用于电子银行网络应用程序访问,例如来自 CD/USB 的用户数字证书。

      【讨论】:

        猜你喜欢
        • 2016-04-25
        • 2012-12-15
        • 2011-01-18
        • 2017-01-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-28
        • 1970-01-01
        相关资源
        最近更新 更多