2

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

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

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

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

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

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

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

......就是这样。

有什么时髦的建议吗?明智的话?有用的网址?尖酸的评论?

谢谢。

编辑:对于任何对此感到好奇的人,按照下面 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);
}
4

2 回答 2

3

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

你可以这样列出所有文件..构建一个小的ajax脚本,比如一个文件对话框,它将有php或任何发回结构的东西

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

于 2012-11-23T20:56:38.020 回答
3

You'll probably have to use something that runs in the browser like flash or silverlight.

Since it's an internal app I would use silverlight as everything else is in .NET. It should be enought to only make the file access part in the plugin.

Here is an article about local file access: https://www.wintellect.com/silverlight-4-s-new-local-file-system-support/

于 2012-04-23T07:57:02.963 回答