apache / apache/cordova-plugin-file
Directory read returns broken FileEntry objects
- 主要语言
- JavaScript
- 星标
- 744
- 派生
- 754
- 平均合并
- 3 天 4 小时
- 30 天内合并 PR
- 1
描述
# Bug Report
## Problem
### What is expected to happen?
I should be able to read a FileEntry's metadata no matter how I got hold of the object
### What does actually happen?
I retrieving the FileEntry handle directly via `resolveLocalFilesystemURL` I can call getMetadata() on the returned object without an issue; but if I obtain the handle by reading the parent (root) directory, the call will result in NOT_FOUND_ERR`
### Command or Code
I am running the below code in the `deviceready` event handler:
```
console.log('Running cordova-' + cordova.platformId + '@' + cordova.version);
function errorHandler(e) {
console.error("Error: ", e);
}
function testFileMetadataRead() {
console.log("Successful file write...");
window.resolveLocalFileSystemURL(cordova.file.dataDirectory + "/test.txt", function(file) {
console.log("Contructor of FILE handle", file.constructor);
file.getMetadata(
function (m) { console.log("Getting FILE metadata", file, m) },
function (e) { console.log("Error getting FILE metadata", e) }
);
}, errorHandler);
window.resolveLocalFileSystemURL(cordova.file.dataDirectory, function(dir) {
dir.createReader().readEntries(function (entries) {
entries.forEach(function(entry) {
console.log("Contructor of DIRECTORY ENTRY handle", entry.constructor);
entry.getMetadata(
function (m) { console.log("Getting DIR ENTRY metadata", file, m) },
function (e) { console.log("Error getting DIR ENTRY metadata", e) }
);
});
}, function (e) { console.log("Error listing directory", e) });
}, errorHandler);
}
window.resolveLocalFileSystemURL(cordova.file.dataDirectory, function(dir) {
dir.getFile("test.txt", { create: true, exclusive: false }, function (fileEntry) {
fileEntry.createWriter(function (fileWriter) {
fileWriter.onwriteend = testFileMetadataRead;
fileWriter.onerror = function (e) { console.log("Error writing FILE", e) };
const blob = new Blob(["The quick brown fox jumps over the lazy dog!"], { type: 'text/plain' });
fileWriter.write(blob);
});
},
function (e) { console.log("Error creating new file", e) });
}, errorHandler);
```
## Result
```
Running cordova-browser@7.0.0 bundle.js:480:13
Successful file write... bundle.js:509:17
Contructor of FILE handle
function FileEntry(name, fullPath, fileSystem, nativeURL)
bundle.js:512:21
Getting FILE metadata
Object { isFile: true, isDirectory: false, name: "test.txt", fullPath: "/test.txt", filesystem: {…}, nativeURL: null }
Object { modificationTime: Date Sun Mar 22 2026 16:13:17 GMT+0000 (Greenwich Mean Time), size: 44 }
bundle.js:514:40
Contructor of DIRECTORY ENTRY handle
function FileEntry(name, fullPath, fileSystem, nativeURL)
bundle.js:522:29
Error getting DIR ENTRY metadata
Object { code: 1 }
bundle.js:525:48
```
### Environment, Platform, Device
Using Cordova Browser for testing on Linux Mint 22.3.
### Version information
cordova-browser@7.0.0
cordova-plugin-file@8.1.3
cordova-plugin-webpack@1.0.5
## Checklist
- [x] I searched for existing GitHub issues
- [x] I updated all Cordova tooling to most recent version
- [x] I included all the necessary information above
贡献指南
调研方向
从使用 resolveLocalFileSystemURL、createReader().readEntries() 和 getMetadata() 进行 deviceready 复现开始,将直接解析得到的 FileEntry 与目录返回的条目进行比较。使用列出的 Cordova Browser 和 file-plugin 版本进行复现;当两个句柄的元数据获取都在没有 NOT_FOUND_ERR 的情况下成功时,即表示完成。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- javascript
- 领域
- mobile-dev
- Issue 类型
- 缺陷
- 难度
- 3/5
- 预计耗时
- 1-2 天
- 活跃度
- 冷清
- 描述清晰度
- 基本清楚
- 新手友好度
- 55/100