允许在HTML5应用程序中访问Intranet /本地文件的解决方案?

时间:2012-04-23 07:49:34

标签: javascript html5

我很清楚,即使使用新的FileAPI,也无法访问使用文件输入字段或拖放添加的文件的本地路径。这是好事,坏事还是丑陋不是问题所在。根据FileAPI规范,本地文件访问不会被实现,所以我不会屏住呼吸。

但是,让我们假装我处于以下固定参数的情况:

  • 仅开发HTML5应用程序以在公司内部使用
  • 用于后端的.NET(由于与API互操作而需要)
  • 可以指定/控制应与应用程序一起使用的浏览器和版本
  • 需要访问通常位于网络共享上的文件,但也可能是本地用户工作站上的文件

通过访问我不是指访问文件数据,而是能够通过向第三方提供文件的本地路径来将文件拖放/选择事件中继到其他API,以便第三方可以拿起文件并对其进行某种工作。这可以比作使用输入[type = file]字段,就像使用.NET中的OpenFileDialog一样 - 即重点是为应用程序提供文件路径,而不是实际文件

我意识到开箱即用这可能是不可能的。但我也认为必须有某种解决方案来解决这个问题。

我一直在想的一些想法是:

  • 使用浏览器特定方法允许“安全功能”
    • 不确定是否可能 - 累了使用其中一些功能无济于事
    • 将应用程序限制为特定版本的浏览器,因为将来可能会删除该功能
    • 像Chrome扩展程序这样的东西可能会成功
  • 使用在客户端计算机上本地安装的某种伴随应用程序来处理所有磁盘文件处理,可能使用websockets等与HTML5客户端进行通信。
    • 可能非常混乱的解决方案
    • 最初可能会使用户感到困惑
  • 将选定的文件数据提交给服务器,将其存储在特定路径并将此新路径发送给第三方。
    • 将构成大量通过公司网络发送文件,大小超过100 MB
    • 无法对用户选择的文件进行任何就地更改

......就是这样。

任何时髦的建议?明智的话?有用的网址? Snarky评论?

感谢。

编辑:对于任何对此感到好奇的人,根据jgauffin的建议,使用Silverlight非常简单。

从Silverlight代码隐藏(使用提升的权限):

private void fileBtn_Click(object sender, RoutedEventArgs e)
{
    //prompt file select dialog in Silverlight:
    var dlg = new OpenFileDialog();
    dlg.ShowDialog();
    //call JavaScript method and feed it the file path:
    HtmlPage.Window.Invoke("onFileSelected", dlg.File.FullName);
}

2 个答案:

答案 0 :(得分:3)

你可能不得不使用在浏览器中运行的东西,如flash或silverlight。

由于它是一个内部应用程序,我会使用silverlight,因为其他一切都在.NET中。应该只在插件中创建文件访问部分。

以下是有关本地文件访问的文章:https://www.wintellect.com/silverlight-4-s-new-local-file-system-support/

答案 1 :(得分:3)

托管网站的服务器是否可以访问pc的网络?

你可以只列出所有文件..构建一个小的ajax脚本,就像一个文件对话框,将有php或任何发回结构的文件

不需要插件,适用于所有浏览器......:)