允许在 HTML5 应用程序中访问内部网/本地文件的解决方案
Solutions to allowing intranet/local file access in an HTML5 application?
我非常清楚这样一个事实,即即使使用新的FileAPI,也无法访问使用文件输入字段或拖放添加的文件的本地路径。这是好是坏还是丑陋不是这里的问题。根据FileAPI规范,本地文件访问不会实现,所以我不会屏住呼吸。
但是,让我们假装我处于以下固定参数的情况:
- 开发仅在公司内部使用的HTML5应用程序
- 用于后端的 .NET(由于与 API 的互操作而需要)
- 可以准确指定/控制应用程序应使用的浏览器和版本
- 需要访问通常位于网络共享上的文件,但也可能需要访问用户工作站上的本地文件
我所说的访问并不意味着访问文件数据,而是能够通过向第三方提供文件的本地路径来将文件拖放/选择事件中继到其他 API,以便第三方可以拾取文件并对其进行某种工作。这可以比作使用input[type=file]字段,就像在.NET中使用OpenFileDialog一样 - 即重点是向应用程序提供文件路径,而不是实际文件。
我意识到开箱即用这可能是不可能的。但我也认为,这个问题必须有某种解决办法。
我一直在玩的一些想法是:
- 使用浏览器特定方法允许"安全功能"
- 不确定是否可能 - 厌倦了使用其中一些功能无济于事
- 将应用程序限制为特定版本的浏览器,因为该功能将来可能会被删除
- 像Chrome扩展程序这样的东西可能会做到这一点
- 使用某种安装在客户端计算机上本地的配套应用程序,负责所有磁盘上的文件处理,可能使用 websocket 等与 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);
}
你可能不得不使用在浏览器中运行的东西,如flash或silverlight。
由于它是一个内部应用程序,我会使用 silverlight,因为其他所有内容都在 .NET 中。只需使文件访问成为插件的一部分就足够了。
这是一篇关于本地文件访问的文章:https://www.wintellect.com/silverlight-4-s-new-local-file-system-support/
站点的服务器是否可以访问PC网络?
你可以以这种方式列出所有文件。 构建一个小的 Ajax 脚本,如文件对话框,其中包含 PHP 或任何发回结构的内容
。无需插件,适用于所有浏览器... :)
- 使用SeleniumWebdriver将文本复制到文件时出现编译错误的解决方案
- jQuery/AAJAX解决方案,用于检查网络共享中是否存在文件夹
- 在两个解决方案中引用通用的Javascript文件
- 文件.位置 奇怪的行为?/ 替代 jsTree 链接解决方案
- 允许在 HTML5 应用程序中访问内部网/本地文件的解决方案
- 需要一个更好的解决方案来从JavaScript文件附加HTML
- 在不稳定的互联网连接解决方案上上传文件
- 可以在解决方案中重新处理javascript intellisense引用另一个项目中的js文件
- 安卓4.4.2 html文件上传是否正常?需要解决方案,而不是变通方法
- 是否有任何解决方案来引用javascript文件不在当前的解决方案,在VS2010智能感知
- 如何在ES6中分离Jsx内部渲染函数到一个单独的文件?或任何其他解决方案,以分离逻辑和表示
- 使用SVG文件的跨浏览器解决方案
- Javascript文件结构-任何好的解决方案
- 联系表单与文件上传解决方案
- 文件输入的onchange的解决方案是什么?
- NodeJS -使用Core NodeJS和原始Node解决方案上传带有进度条的文件
- SonarQube Runner跳过Asp中的JavaScript文件.Net MVC解决方案
- Javascript读取文件的解决方案(查看脚本,但不加载它)
- PHP AJAX文件上传器解决方案
- 使用ENVDTE时的Java脚本-将新项目添加到现有解决方案中,并将其定位在特定的子文件夹中