有没有办法从Web应用程序读取本地netcdf文件?

问题描述:

我们正在构建一个用于数据分析的Web服务,并且希望从运行浏览器的本地机器访问netcdf文件。 Javascript提供了一个文件浏览器,但是(由于我学习的安全原因),它会在选择后自动上传文件,而不是允许(只读)访问它。这提出了一个表演停止者,因为netcdf文件可以是巨大。请注意,netcdf格式和API明确允许切分和提取各个变量,这是格式如此受欢迎的一个原因。有没有办法从Web应用程序读取本地netcdf文件?

现在,对这个问题的一些研究表明,服务器 - 客户端架构通常不允许访问本地文件结构来防止间谍活动。另一方面,在HTML5中有一个文件API,它完全支持我们需要的操作类型 - 除了可以通过指定字节范围来访问文件的某些部分,但是没有netcdf API可用;因此在将其分割到服务器上之前,可以再次复制整个文件。

当然,另一种选择是网络服务,如OpenDAP,它们的意思是完全符合我们的要求,即通过互联网访问netcdf文件的一部分。但是,这当然要求每个用户都必须先安装OpenDAP服务器,然后才能从Web服务中访问其本地文件。 (或者,至少他们必须安装一个Web服务器,以便人们可以通过http://localhost/...访问该文件)。

所以:有谁知道解决方案从Web应用程序读取本地netcdf文件的特定部分?具体来说,是否有JavaScript工具可用于此?

+0

我对netcdf并不熟悉,但是您应该注意到,允许自动化工具访问本地存储后存在强大的安全问题,这就是为什么所有浏览器都会阻止此行为。 –

没有Javascript工具可以读取NetCDF,但有Java库:http://www.unidata.ucar.edu/downloads/netcdf/index.jsp

您可以部署Java Applet以在本地读取NetCDF文件。从那里你可以让Applet尝试处理文件,或与后端服务通信,甚至尝试从Javascript调用Applet:http://docs.oracle.com/javase/tutorial/deployment/applet/invokingAppletMethodsFromJavaScript.html

根据我的理解,没有特定的JavaScript库用于读取NetCDF。但让我减少一些想法:

  • 就像你说的,你可以安装一个本地网络服务器,并使用服务器端语言来执行一个程序,读取你的磁盘上的文件。您可以使用名为ncdump-json的命令行软件。我故意为此写了这个软件。
  • 你说你不想安装像OpenDAP或网络服务器这样的软件,但也许是一个桌面应用程序,一个独立的.exe就可以。使用node.js加铬(这称为nw.js),你有一个同时是nodejs服务器和铬浏览器的程序。通过这种方式,您可以编写一个读取数据的Web应用程序(例如,使用嵌入式nodejs服务器和产生ncdump-json ...)。
  • 现在是最简单的方案,100%的客户端解决方案...我认为这只能使用Javascript ...或任何可以“编译”为Javascript的东西来实现。我们需要在Javascript中使用netCDF库,这可能吗?我猜是这样。 Emscripten是LLVM-to-Javascript编译器,而netCDF是C,所以必须可以用clang/LLVM编译它,因此必须可以使用Emscripten来创建netCDF JS库版本,而不需要必须从头开始写(并且维护)一个JS端口。如果我没有错,随机访问文件的HTML5文件API中的方法slice,所以这应该不成问题。

希望我帮了忙。

当前您可以使用netcdfjs,它是一个JavaScript库,允许读取NetCDF v3文件。因为它是一个NodeJS包,所以你可以在服务器端运行它,而对于常规大小的文件,你可以在线阅读它,这里有一个example