使用 requestFileSystem 和 toUrl() 函数显示图像

发布于 2024-12-06 07:17:14 字数 1362 浏览 1 评论 0原文

我制作了一个使用 requestFileSystem 的应用程序。一切正常。 添加新图像并将其存储在持久的本地文件系统中。

有人知道如何用 toUrl() 显示图像吗?

...
window.requestFileSystem(window.PERSISTENT, 5*1024*1024, function(fs){
    fs.root.getDirectory(itemId, {create: false}, function(dirEntry) {
        var dirReader = dirEntry.createReader();
        var entries = [];
        var readEntries = function() {
           dirReader.readEntries (function(results) {
            if (!results.length) {
              listResults(entries.sort(), itemId);
            } else {
              entries = entries.concat(fsdatas.dir.toArray(results));
              readEntries();
            }
          }, errorHandler);
        };
        readEntries();
    });
}, errorHandler);
...

输出

function listResults(entries, itemId) {
    document.querySelector('#listRecordFiles-'+itemId).innerHTML = '';
    var fragment = document.createDocumentFragment();
    var i = 0;
    entries.forEach(function(entry, i) {
        i++;
        var img = document.createElement('img');
        img.src = entry.toURL();
        fragment.appendChild(img);
    });
    document.querySelector('#listRecordFiles-'+itemId).appendChild(fragment);
}

是:

<img src="filesystem:http://domain.tld/persistent/1/image-test.jpg">

但浏览器上没有显示任何内容。

I made an application who use requestFileSystem. Everything works fine.
Add a new image and store it in an persistent local file system.

Does anybody know how to display an image with toUrl() ?

...
window.requestFileSystem(window.PERSISTENT, 5*1024*1024, function(fs){
    fs.root.getDirectory(itemId, {create: false}, function(dirEntry) {
        var dirReader = dirEntry.createReader();
        var entries = [];
        var readEntries = function() {
           dirReader.readEntries (function(results) {
            if (!results.length) {
              listResults(entries.sort(), itemId);
            } else {
              entries = entries.concat(fsdatas.dir.toArray(results));
              readEntries();
            }
          }, errorHandler);
        };
        readEntries();
    });
}, errorHandler);
...

And

function listResults(entries, itemId) {
    document.querySelector('#listRecordFiles-'+itemId).innerHTML = '';
    var fragment = document.createDocumentFragment();
    var i = 0;
    entries.forEach(function(entry, i) {
        i++;
        var img = document.createElement('img');
        img.src = entry.toURL();
        fragment.appendChild(img);
    });
    document.querySelector('#listRecordFiles-'+itemId).appendChild(fragment);
}

The output is :

<img src="filesystem:http://domain.tld/persistent/1/image-test.jpg">

But nothing is displayed on browser.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

我要还你自由 2024-12-13 07:17:14

下面的示例是一段代码,负责读取应用程序根目录中保存的图像,并显示在文档正文中。

请记住,在本例中,我使用 navigator.camera.DestinationType.DATA_URL 打开 PHOTOLIBRARY,并使用 atob (ascii到二进制),所以用btoa(二进制到ascii)携带图像

function myLoadFile(filename) {
    var myDocument = document.querySelector("body");
    filesystem.root.getFile(filename, {}, function(fileEntry) {
        fileEntry.file(function(file) {
            var reader = new FileReader();

            reader.onload = function(e) {
                var img = document.createElement('img');
                // if you save the file with atob (ascii to binary), then:
                img.src = "data:image/jpeg;base64,"+btoa(this.result);
                // if you don't save the file without atob, then:
                // img.src = "data:image/jpeg;base64,"+this.result;
                myDocument.appendChild(img)
            };

            reader.readAsText(file);
        }, errorHandler);

    }, errorHandler);
}

The example below is a snippet of code responsible for reading the images saved in the application's root directory, and show in the document body.

Remember, in this case, I used navigator.camera.DestinationType.DATA_URL to open the PHOTOLIBRARY, and saved the image content using atob (ascii to binary), so carry the image with btoa (binary to ascii)

function myLoadFile(filename) {
    var myDocument = document.querySelector("body");
    filesystem.root.getFile(filename, {}, function(fileEntry) {
        fileEntry.file(function(file) {
            var reader = new FileReader();

            reader.onload = function(e) {
                var img = document.createElement('img');
                // if you save the file with atob (ascii to binary), then:
                img.src = "data:image/jpeg;base64,"+btoa(this.result);
                // if you don't save the file without atob, then:
                // img.src = "data:image/jpeg;base64,"+this.result;
                myDocument.appendChild(img)
            };

            reader.readAsText(file);
        }, errorHandler);

    }, errorHandler);
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文