我在网页上有一个文件结构,并为以下场景寻找解决方案:
选择的文件应该在浏览器缓存中下载并打开(如果它是一个 excel 文档,用 excel 打开等)。现在,当用户更改文件时,应该会检测到并重新上传文件。
这甚至可以用 JavaScript 实现吗?如果是,我在哪里存储文件(临时 Internet 文件夹?)以及如何检测更改?
我在网页上有一个文件结构,并为以下场景寻找解决方案:
选择的文件应该在浏览器缓存中下载并打开(如果它是一个 excel 文档,用 excel 打开等)。现在,当用户更改文件时,应该会检测到并重新上传文件。
这甚至可以用 JavaScript 实现吗?如果是,我在哪里存储文件(临时 Internet 文件夹?)以及如何检测更改?
您描述它的方式:不,这在 JavaScript 中是不可能的。
听起来你想要一个 FTP 客户端。
当用户更改文件时,应检测到并重新上传文件。
这是不可能的,因为 JS 几乎无法访问文件系统。
您完全可以访问文件的唯一方法是要求用户选择一个,请参阅:
如何使用 Javascript 打开本地磁盘文件?
所以你最多可以做的是:
下载文件后,您无法控制它。
对于注册了协议的应用程序(例如steam://
,例如),您可能能够请求在程序中打开的 URL,但这需要if
每个文件类型/程序。
根本不可能检测文件更改(因为您无权访问该文件),并且再次上传需要用户使用文件对话框手动选择文件。
为此,您需要让用户选择下载的文件,然后检查修改的唯一方法。
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
感谢您的帮助和想法。我看到了一个包含此功能的软件(https://www.group-office.com/),所以必须有办法做到这一点。
新想法,使用 chrome 文件系统 api(@Siguza 已经说过):
我看到 excel 锁定文件的一些问题检查文件是否已使用 HTML5 文件 API 更改, 但除此之外这应该可以工作,不是吗?