输入文件大小和内容在 macOS 上不会更新

2024-04-03

我编写了一个基于网络的小型工具,它使用文件输入来读取不断变化的文件。用户手动选择它(一次!),JavaScript 会跟踪它的更改时间(上次文件修改时间和文件大小)。如果已更改,则会再次读取文件内容。

这在 Windows 上的所有浏览器中都可以正常工作。但在 macOS 上(在 Safari 10.1.2 和 Firefox 51.0.1 中测试)似乎只有最后修改时间被更新。文件大小未更新,似乎也无法再读取文件内容。因此我无法在 macOS 上的浏览​​器中跟踪文件更改。

但为什么?这是 macOS 中的安全限制吗?

请使用以下代码片段进行测试。选择一个文件(例如文本文件),查看上次修改的时间戳和文件大小,然后更改文件并再次查看大小是否已更改。在 macOS 上,文件大小不会改变。

请不要使用 jQuery。

window.addEventListener('load', function() {
  window.setInterval(function() {
    var logFile = document.querySelector('#file').files[0];
    if (logFile) {
      document.querySelector('#info').innerHTML = '<br/>' +
        (new Date()).toString() + '<br/>Last modified: ' +
        logFile.lastModified +
        '<br/>Size: ' +
        logFile.size;
    }
  }, 1000);
});
#info {
  font-family: Courier;
  font-size: 0.9em;
}
<!DOCTYPE html>
<input type="file" id="file" />
<p id="info"></p>

我不认为这是一种安全措施,而不仅仅是一种性能措施。
一旦他们获得了文件元数据信息,他们将不再请求它以进一步获取=>更少的用户磁盘访问权限。
说实话,我什至有点惊讶在 Windows 上他们每次都会请求这些元数据。

要解决这个问题,并不是一件容易的事,我会重新考虑对此的需求,以及如果消息传递无法在另一个级别完成(例如,从确实修改文件的进程)。

事实上,Firefox 和 Safari 在这种情况下的行为并不相同:

  • 一旦您从输入中选择了该文件,Safari 似乎就会创建一个指向该文件的 blobURI,并且当您稍后尝试访问它时(例如从 FileReader)总是使用它。这里真正的问题是我们无法在磁盘上获取新版本,因为无论出于何种原因,这个 blobURI 似乎都不是真正的pointer到磁盘...但是如果我们只想检测文件更改,那么这对我们有好处,因为我们只需要检查FileReader.onerror事件,即使有File.slice(0,1)(即最小 I/O)。

  • 另一方面,Firefox 会触发 FileReader 的错误only如果缓存的元数据的大小与已读取的元数据的大小不匹配。这意味着您必须在每次检查时读取整个文件,并且如果没有发生错误,请仔细检查数据是否实际上相同......But,在此浏览器中,您仍然可以使用 blobURI 从 AJAX 获取磁盘上的实际文件,以获得最新版本。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

输入文件大小和内容在 macOS 上不会更新 的相关文章

随机推荐

  • 使用 Swift 将当前时间设置为 yyyy-MM-dd 00:00:00

    我想问一下NSDate 如何设置 格式化当前时间 如 2015 08 12 09 30 41 0000 到 2015 08 12 00 00 00 0000 我已经在使用 var dateFormatter NSDateFormatter
  • Python doctest:有条件地跳过测试

    我知道如何使用跳过文档测试 doctest SKIP 但我不知道如何跳过测试有时 基于运行时条件 例如 gt gt gt if os path isfile foo open foo readlines else pass doctest
  • jQuery 取消和重置幻灯片动画

    我正在编写一些 jQuery 来切换 div 在伪代码中 应该执行以下操作 item click check to see if the div I want to expand is hidden if so slideup all of
  • 如何汇总正在进行的编程

    我正在为 MRP 程序编写一份报告 其中包含一个我计算的订购数量的字段 如果它是小数点 我需要将其四舍五入 例如 2 33需要向上舍入为3等等 我努力了 oder round order 0 但这只给我 2 00 我需要将该数字四舍五入到下
  • 如何在使用按位运算添加两个整数时添加无限循环的代码修复

    这是原件question https stackoverflow com questions 39113479 infinite loop while adding two integers using bitwise operations
  • 正则表达式用于匹配某些内容(如果前面没有其他内容)

    对于Java中的正则表达式 我想编写一个当且仅当模式前面没有某些字符时才匹配的正则表达式 例如 String s foobar barbar beachbar crowbar bar 我想匹配如果bar前面没有foo 所以输出将是 barb
  • 在 Cocoa/Carbon 中全局隐藏鼠标光标?

    有没有办法全局隐藏 Cocoa 或 Carbon 中所有应用程序的鼠标光标 或者至少用其他东西代替它 编辑 感谢大家的意见 但事实证明 Daniel Jalkut 不久前找到了解决方案 http lists apple com archiv
  • Lisp 中的数组与列表:为什么下面的代码中的列表要快得多?

    我在解决时得到了意想不到的结果欧拉计划中的问题 75 https projecteuler net problem 75 我的代码确实找到了正确的解决方案 但它的行为很奇怪 我的解决方案包括遍历毕达哥拉斯树 巴宁矩阵 https en wi
  • 如何将xml解析为java对象? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个用于配置一些规则的XML 它没有复杂的结构 但是这个配置在我的系统中的任何地方使用 所以我想将此XML解析为java对象并设计
  • 使用已删除的名称创建 Azure API 管理会导致名称“已在使用中”错误

    我之前使用 Terraform 创建并随后删除了 Azure API 管理服务 它消失在Azure Portal中 几个小时后 当我尝试使用相同名称重新创建 API 管理时 我在 Azure 门户中收到此错误 name already in
  • R ranger 包中的预测概率

    我正在尝试在 R 中建立一个具有随机森林分类的 模型 通过 Ned Horning 编辑代码 我首先使用randomForest包但后来发现ranger 这保证了更快的计算 首先 我使用下面的代码在拟合模型后获得每个类别的预测概率rando
  • 编译器如何为 C++ 中条件声明的自动变量分配内存?

    假设我有一个函数 根据某些运行时条件创建昂贵的自动对象或创建便宜的自动对象 void foo if runtimeCondition int x 0 else SuperLargeObject y 当编译器为此函数分配堆栈帧的内存时 它是否
  • jquery selectedIndex 不起作用

    我有一个带有许多选择标签的 from 当用户提交表单时 我想检查用户是否为所有选择标签选择一个选项 这是我的 jquery 代码 apForm select each function var this this if this selec
  • Kubernetes 配置映射符号链接 (..data/):有办法避免它们吗?

    我注意到 当我创建并安装包含一些文本文件的配置映射时 容器会将这些文件视为符号链接 data myfile txt 例如 如果我的配置映射名为 tc configs 并包含 2 个名为 stripe1 xml 和 stripe2 xml 的
  • CSS Calc((100%/5)+10px) 不起作用

    好吧 在我的 CSS 中 我正在尝试进行数学计算 calc 100 5 10px 当我这样做时 它不起作用 当我计算时 100 5 它工作得很好 我需要做什么才能让 10px 正常工作 您需要做的是使用正确的语法 calc 100 5 10
  • 如何在 Ionic 框架中使用 CSS 选择器隔离特定平台

    我遇到了一种罕见的情况 尽管考虑到 Android 和 iOS 之间的行为不同 这是可以理解的 我想在我正在 Ionic 框架上开发的 Cordova 应用程序中使用专门针对 iOS 的不同样式 我想知道基于平台隔离选择器的最佳方法 基本上
  • 如何通过azure云服务上的kubernetes检查持久卷的内容

    我已将软件打包到容器中 我需要通过Azure容器服务将容器放入集群 该软件具有目录的输出 src data 我想访问整个目录的内容 搜索后 我必须解决 在azure上使用Blob存储 但是搜索后 我找不到可执行方法 使用持久卷 但是我找到的
  • Python Pygame 游戏灯光

    我正在制作一款 2D 横向卷轴游戏 游戏中的一个物品是火炬 我有一个手臂可以旋转的玩家 我们可以获取手臂的角度 我正在寻找跟随手臂角度的三角形光束形状 我有一些想法 比如在整个屏幕上放置一个 alpha 图像 并根据手臂角度单独从每个像素中
  • 具有扩展方法的 Kotlin 数据绑定

    我正在尝试在 Android 的数据绑定中使用 Kotlin 扩展方法 例如 调用 onclick 处理程序 所以我编写了这段代码 posttest list item xml
  • 输入文件大小和内容在 macOS 上不会更新

    我编写了一个基于网络的小型工具 它使用文件输入来读取不断变化的文件 用户手动选择它 一次 JavaScript 会跟踪它的更改时间 上次文件修改时间和文件大小 如果已更改 则会再次读取文件内容 这在 Windows 上的所有浏览器中都可以正