2

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

选择的文件应该在浏览器缓存中下载并打开(如果它是一个 excel 文档,用 excel 打开等)。现在,当用户更改文件时,应该会检测到并重新上传文件。

这甚至可以用 JavaScript 实现吗?如果是,我在哪里存储文件(临时 Internet 文件夹?)以及如何检测更改?

4

3 回答 3

0

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

当用户更改文件时,应检测到并重新上传文件。

这是不可能的,因为 JS 几乎无法访问文件系统。
您完全可以访问文件的唯一方法是要求用户选择一个,请参阅:
如何使用 Javascript 打开本地磁盘文件?

所以你最多可以做的是:

  1. 文件已下载。
  2. 根据浏览器和设置,文件可能会自动打开,也可能不会。
  3. 用户会看到一个文件选择对话框,他们可以在完成编辑后使用该对话框。
  4. 将所选文件与服务器上的文件进行比较,如果更改则上传。

下载文件后,您无法控制它。
对于注册了协议的应用程序(例如steam://,例如),您可能能够请求在程序中打开的 URL,但这需要if每个文件类型/程序。
根本不可能检测文件更改(因为您无权访问该文件),并且再次上传需要用户使用文件对话框手动选择文件。

于 2015-06-12T19:14:37.270 回答
0

为此,您需要让用户选择下载的文件,然后检查修改的唯一方法。

HTML

<label for="excelFile">Select the excel file: </label><input type="file" id="excelFile" />

JS

//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
   }
});

如果您知道您的用户正在使用 Chrome,您可以使用Chrome 的 FileSystem api

于 2015-06-12T19:20:14.497 回答
0

感谢您的帮助和想法。我看到了一个包含此功能的软件(https://www.group-office.com/),所以必须有办法做到这一点。

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

  • 使用文件系统 api 从用户本地文件系统上的服务器数据库创建文件
  • 在本地打开文件(应该使用文件系统:http ://www.example.com/persistent/info.txt ,或者?)
  • 每 x 秒轮询文件的最后更改
  • 如果检测到更改,则将文件上传回服务器数据库

我看到 excel 锁定文件的一些问题检查文件是否已使用 HTML5 文件 API 更改, 但除此之外这应该可以工作,不是吗?

于 2015-06-13T18:22:10.870 回答