我在网页上有一个文件结构,并寻找以下情况的解决方案:
所选文件应下载到浏览器缓存中并打开(如果是 excel 文档,请使用 excel 打开等)。现在,当用户更改文件时,应该检测到该文件,并再次上传该文件。
这在 JavaScript 中可能吗?如果是,我在哪里存储文件(临时互联网文件夹?)以及如何检测更改?
做到这一点,您需要让用户选择下载的文件,然后检查修改。
.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 的文件系统 API
你描述它的方式:不,这在 JavaScript 中是不可能的。
听起来你想要一个FTP客户端。
当用户更改文件时,应检测到该文件,并应再次上载该文件。
这是不可能的,因为JS几乎无法访问文件系统。
访问文件的唯一方法是请求用户选择一个文件,请参阅:
如何使用Javascript打开本地磁盘文件?
所以你能做的最多就是:
- 文件已下载。
- 根据浏览器和设置,文件可能会自动打开,也可以不打开。
- 用户会看到一个文件选择对话框,他们可以在完成编辑时使用。
- 将所选文件与服务器上的文件进行比较,如果更改,则上传。
下载文件后,您无法控制它。
对于已注册协议的应用程序(例如,steam://
),您可能能够请求在程序中打开 URL,但这需要每种文件类型/程序if
。
根本不可能检测文件更改(因为您无权访问文件),再次上传需要用户使用文件对话框手动选择文件。
感谢您的帮助和想法。我看到了一个包含此功能的软件(https://www.group-office.com/),所以必须有办法做到这一点。
新想法,使用chrome文件系统api(@Siguza已经说过):
- 使用文件系统 api 从用户本地文件系统上的服务器数据库创建文件
- 在本地打开文件(应该使用 filesystem:http://www.example.com/persistent/info.txt,或者?)
- 每 x 秒轮询一次文件的最后更改
- 如果检测到更改,请将文件上传回服务器数据库
我看到 excel 锁定文件时遇到了一些问题 使用 HTML5 文件 API 检查文件是否已更改但除此之外,这应该有效,不是吗?