Javascript Js-缓存文件,打开它,检测更改并上传

Javascript Js-缓存文件,打开它,检测更改并上传,javascript,file,filestructure,Javascript,File,Filestructure,我在网页上有一个文件结构,并为以下场景寻找解决方案: 所选文件应在浏览器缓存中下载,如果是excel文档,则应打开该文件,并使用excel打开该文件,等等。。 现在,当用户更改文件时,应检测到该文件并再次上载该文件 JavaScript甚至可以做到这一点吗? 如果是,我在哪里存储文件临时internet文件夹?我如何检测这些变化呢?您描述它的方式:不,这在JavaScript中是不可能的。 听起来你想要一个FTP客户端 当用户更改文件时,应检测到该文件并再次上载该文件 这是不可能的,因为JS几乎

我在网页上有一个文件结构,并为以下场景寻找解决方案:

所选文件应在浏览器缓存中下载,如果是excel文档,则应打开该文件,并使用excel打开该文件,等等。。 现在,当用户更改文件时,应检测到该文件并再次上载该文件

JavaScript甚至可以做到这一点吗?
如果是,我在哪里存储文件临时internet文件夹?我如何检测这些变化呢?

您描述它的方式:不,这在JavaScript中是不可能的。 听起来你想要一个FTP客户端

当用户更改文件时,应检测到该文件并再次上载该文件

这是不可能的,因为JS几乎没有访问文件系统的权限。 访问文件的唯一方法是请求用户选择一个文件,请参见:

因此,您所能做的最多是:

文件已下载。 根据浏览器和设置,文件可以自动打开,也可以不打开。 用户将看到一个文件选择对话框,在完成编辑时可以使用该对话框。 将所选文件与服务器上的文件进行比较,并在更改后上载。 下载文件后,您无法控制它。 例如,对于已注册协议(如steam://)的应用程序,您可能可以请求在程序中打开的URL,但这将需要每个文件类型/程序的if。
检测文件更改是完全不可能的,因为您无法访问该文件,再次上载需要用户使用文件对话框手动选择该文件。

要做到这一点,您需要让用户选择下载的文件,然后检查是否有修改

HTML

JS


如果您知道您的用户正在使用Chrome,您可以使用谢谢您的帮助和想法。我看到一个软件,其中包括这个功能,所以必须有办法做到这一点

使用chrome文件系统api@Siguza的新想法已经说过:

使用文件系统api从用户本地文件系统上的数据库服务器创建文件 本地打开的文件应使用文件系统:,还是? 每隔x秒轮询文件的最后更改 如果检测到更改,请将文件上载回服务器数据库 我看到excel锁定文件时出现了一些问题
但是除了这一点之外,它应该可以工作,不是吗?

这与Javascript无关。它是纯HTTP。一定要了解HTTP的缓存部分,然后就可以开始了。但是,某些浏览器在遵守服务器的缓存指令方面可能很固执,因此您应该注意浏览器缓存的怪癖。您不能随机访问用户计算机上的文件。您必须让他们通过文件输入选择一个文件,然后查看修改日期,查看是否已修改。您必须将最后一个修改日期存储在localStorage的某个位置,服务器端等。但如果您知道您的用户正在使用chrome,您可以使用chromes文件系统api,该api允许对客户端计算机上的沙盒区域进行读/写访问。但网页上显示的文件结构实际上并不存在,它是映射在couchdb数据库上的文件结构,该数据库由node.js服务器解释,并通过socket.io提供给前端。此文件是couchdb文档的附件。啊,很抱歉,您希望文件中的更改在本地完成,而不是在服务器上完成。在这种情况下,HTTP是不够的。是的,没错。我希望用户通过单击按钮将文件下载到临时文件夹,观看下载的文件,并在更改时再次上载。我知道我无法使用JavaScript访问客户端计算机,这正是问题所在。如何做到这一点?嗯,我发现这似乎可以通过浏览器文件系统Api实现:@user3301565,这是一个nodejs库,可以在服务器端工作。不是这样的:Filer是一个类似POSIX的文件系统接口,用于node.js和基于浏览器的JavaScript。基于浏览器的JavaScript和模块的加载通过requireJS工作,因此应该工作,或者@user3301565基于浏览器的JavaScript意味着您可以访问IndexedDB或WebSQL数据库,就像它是一个文件系统一样,您无法访问客户机的实际文件系统。您可以通过加载文件服务器并运行新的Filer.FileSystem.stat'/A_PATH_the_EXISTS',functionerr,stats{iferrthrow err;console.logstats;};在控制台中,存在的/A_路径显然应该替换为现有路径名。除/之外的任何操作都会导致错误。啊,我明白了,谢谢!但这难道不能解决我的问题吗?要将文件作为附件存储在客户端本地数据库中,而不是将其保存到客户端文件系统中?是否可以打开、编辑和查看本地数据库中作为附件的文件?
<label for="excelFile">Select the excel file: </label><input type="file" id="excelFile" />
//Change event to detect when the user has selected a file
document.querySelector("#excelFile").addEventListener("change",function(e){
   //get the selected file
   var file = this.files[0];

   //get the last modified date
   var lastModified = file.lastModified;

   //check lastModified against stored lastModified
   //this assumes you store the last mod in localStorage
   if(localStorage['excelLastMod'] < lastModified){
       //It has modified update last mod
       localStorage['excelLastMod'] = lastModified;

       //do upload
   }
});