(3)HTML5 文件操作API

读取目录内容

要读取目录的内容,可先创建 DirectoryReader,然后调用 readEntries() 方法。

我们不能保证所有目录条目都能在仅调用一次 readEntries() 的情况下同时返回。

也就是说,您需要一直调用 DirectoryReader.readEntries(),直到系统不再返回结果为止。以下代码对此作了说明:

  1. <ul id="filelist"></ul>
  2. function toArray(list) {
  3. return Array.prototype.slice.call(list || [], 0);
  4. }
  5. function listResults(entries) {
  6. // Document fragments can improve performance since they‘re only appended
  7. // to the DOM once. Only one browser reflow occurs.
  8. var fragment = document.createDocumentFragment();
  9. entries.forEach(function(entry, i) {
  10. var img = entry.isDirectory ? ‘<img src="folder-icon.gif">‘ :
  11. ‘<img src="file-icon.gif">‘;
  12. var li = document.createElement(‘li‘);
  13. li.innerHTML = [img, ‘<span>‘, entry.name, ‘</span>‘].join(‘‘);
  14. fragment.appendChild(li);
  15. });
  16. document.querySelector(‘#filelist‘).appendChild(fragment);
  17. }
  18. function onInitFs(fs) {
  19. var dirReader = fs.root.createReader();
  20. var entries = [];
  21. // Call the reader.readEntries() until no more results are returned.
  22. var readEntries = function() {
  23. dirReader.readEntries (function(results) {
  24. if (!results.length) {
  25. listResults(entries.sort());
  26. } else {
  27. entries = entries.concat(toArray(results));
  28. readEntries();
  29. }
  30. }, errorHandler);
  31. };
  32. readEntries(); // Start reading dirs.
  33. }
  34. window.requestFileSystem(window.TEMPORARY, 1024*1024, onInitFs, errorHandler);

删除目录

DirectoryEntry.remove() 方法的行为与 FileEntry 相应方法的行为非常相似。差别在于:尝试删除非空目录时会引发错误。

以下代码会从“/music/genres/”删除空的“jazz”目录:

  1. window.requestFileSystem(window.TEMPORARY, 1024*1024, function(fs) {
  2. fs.root.getDirectory(‘music/genres/jazz‘, {}, function(dirEntry) {
  3. dirEntry.remove(function() {
  4. console.log(‘Directory removed.‘);
  5. }, errorHandler);
  6. }, errorHandler);
  7. }, errorHandler);

以递归方式删除目录

如果您不需要某个包含条目的目录,不妨使用 removeRecursively()。该方法将以递归方式删除目录及其内容。

以下代码会以递归方式删除“music”目录及其包含的所有文件和目录:

  1. window.requestFileSystem(window.TEMPORARY, 1024*1024, function(fs) {
  2. fs.root.getDirectory(‘/misc/../music‘, {}, function(dirEntry) {
  3. dirEntry.removeRecursively(function() {
  4. console.log(‘Directory removed.‘);
  5. }, errorHandler);
  6. }, errorHandler);
  7. }, errorHandler);

复制、重命名和移动

FileEntryDirectoryEntry 享有共同的操作。

复制条目

FileEntryDirectoryEntry 均可使用 copyTo() 复制现有条目。该方法会自动以递归方式复制文件夹。

以下代码示例会将“me.png”文件从一个目录复制到另一个目录:

  1. function copy(cwd, src, dest) {
  2. cwd.getFile(src, {}, function(fileEntry) {
  3. cwd.getDirectory(dest, {}, function(dirEntry) {
  4. fileEntry.copyTo(dirEntry);
  5. }, errorHandler);
  6. }, errorHandler);
  7. }
  8. window.requestFileSystem(window.TEMPORARY, 1024*1024, function(fs) {
  9. copy(fs.root, ‘/folder1/me.png‘, ‘folder2/mypics/‘);
  10. }, errorHandler);

移动或重命名条目

FileEntryDirectoryEntrymoveTo() 方法可让您移动或重命名文件或目录。

其第一个参数是文件要移动到的目标父目录,其第二个参数是文件可选的新名称。如未提供新名称,系统将使用文件的原名称。

以下示例将“me.png”重命名为“you.png”,但并不移动该文件:

  1. function rename(cwd, src, newName) {
  2. cwd.getFile(src, {}, function(fileEntry) {
  3. fileEntry.moveTo(cwd, newName);
  4. }, errorHandler);
  5. }
  6. window.requestFileSystem(window.TEMPORARY, 1024*1024, function(fs) {
  7. rename(fs.root, ‘me.png‘, ‘you.png‘);
  8. }, errorHandler);
  9. 以下示例将“me.png”(位于根目录中)移动到名为“newfolder”的文件夹。
  10. function move(src, dirName) {
  11. fs.root.getFile(src, {}, function(fileEntry) {
  12. fs.root.getDirectory(dirName, {}, function(dirEntry) {
  13. fileEntry.moveTo(dirEntry);
  14. }, errorHandler);
  15. }, errorHandler);
  16. }
  17. window.requestFileSystem(window.TEMPORARY, 1024*1024, function(fs) {
  18. move(‘/me.png‘, ‘newfolder/‘);
  19. }, errorHandler);

filesystem: 网址

FileSystem API 使用新的网址机制,(即 filesystem:),可用于填充 src 或 href 属性。例如,如果您要显示某幅图片且拥有相应的 fileEntry,您可以调用 toURL() 获取该文件的 filesystem: 网址:
  1. var img = document.createElement(‘img‘);
  2. img.src = fileEntry.toURL(); // filesystem:http://example.com/temporary/myfile.png
  3. document.body.appendChild(img);
另外,如果您已具备 filesystem: 网址,可使用 resolveLocalFileSystemURL() 找回 fileEntry:
  1. window.resolveLocalFileSystemURL = window.resolveLocalFileSystemURL ||
  2. window.webkitResolveLocalFileSystemURL;
  3. var url = ‘filesystem:http://example.com/temporary/myfile.png‘;
  4. window.resolveLocalFileSystemURL(url, function(fileEntry) {
  5. ...
  6. });

支持的浏览器:

Opera仅支持FileAPI  IE不支持   Safari不支持   Firefox仅支持FileAPI   Chrome/Chromium浏览器支持。
时间: 2024-11-16 12:07:48

(3)HTML5 文件操作API的相关文章

[转载] HTML5 文件操作API——HTML5系列

简介 我常常想,如果网络应用能够读取和写入文件与目录,将会非常方便.从离线转移到在线后,应用变得更加复杂,而文件系统方面的API的缺乏也一直阻碍着网络前进.存储二进制数据或与其进行交互不应局限于桌面.令人欣慰的是,由于FileSystemAPI的出现,这一现状终于得到了改变.有了FileSystemAPI,网络应用就可以创建.读取.导航用户本地文件系统中的沙盒部分以及向其中写入数据. API 被分为以下不同的主题: 读取和处理文件:File/Blob.FileList.FileReader 创建

HTML5 文件操作API

简介 我常常想,如果网络应用能够读取和写入文件与目录,将会非常方便.从离线转移到在线后,应用变得更加复杂,而文件系统方面的API的缺乏也一直阻碍着网络前进.存储二进制数据或与其进行交互不应局限于桌面.令人欣慰的是,由于FileSystemAPI的出现,这一现状终于得到了改变.有了FileSystemAPI,网络应用就可以创建.读取.导航用户本地文件系统中的沙盒部分以及向其中写入数据. API 被分为以下不同的主题: 读取和处理文件:File/Blob.FileList.FileReader 创建

HTML5文件操作API

fiileList对象: file对象的集合 document.getElementById("fileDemo").files取到的就是fileList对象 Blob对象: 原始数据对象,有两个属性 size和type file对象 继承于Blob对象,指向具体的文件除了继承到的size和type属性,另外 还有name和lastModifiedData属性 #获取file对象 var file_obj=document.getElementById("fileDemo&q

Html5 学习系列(四)文件操作API

原文:Html5 学习系列(四)文件操作API 引言 在之前我们操作本地文件都是使用flash.silverlight或者第三方的activeX插件等技术,由于使用了这些技术后就很难进行跨平台.或者跨浏览器.跨设备等情况下实现统一的表现,从另外一个角度来说就是让我们的web应用依赖了第三方的插件,而不是很独立,不够通用.在HTML5标准中,默认提供了操作文件的API让这一切直接标准化.有了操作文件的API,让我们的Web应用可以很轻松的通过JS来控制文件的读取.写入.文件夹.文件等一系列的操作,

C语言 文件操作API介绍

文件的基本概念 所谓“文件”是指一组相关数据的有序集合. 这个数据集有一个名称,叫做文件名. 实际上在前面的各章中我们已经多次使用了文件,例如源程序文件.目标文件.可执行文件.库文件 (头文件)等.文件通常是驻留在外部介质(如磁盘等)上的, 在使用时才调入内存中来.从不同的角度可对文件作不同的分类.从用户的角度看,文件可分为普通文件和设备文件两种. 普通文件是指驻留在磁盘或其它外部介质上的一个有序数据集,可以是源文件.目标文件.可执行程序:也可以是一组待输入处理的原始数据,或者是一组输出的结果.

HTML5 文件拖放API讲解

本章向大家讲解一下HTML 5中文件API与拖放API的使用方法.HTML5的文件API,可以在浏览器中直接显示客户端文件的信息或文件中的内容,而通过拖放API,可以直接将位于客户端中的文件拖动到浏览器中,也可以单独拖动页面中的元素或者元素中的内容. HTML5拖拽文件预览效果图: 在线演示 以前,我们使用file控件,单击上传按钮后选择计算机中的文件.在HTML5中,我们可以先将计算机中的文件直接拖动到浏览器中进行预览,确定文件是我们所需要的,然后单击上传按钮将该文件上传到服务器端. 我们使用

nodejs模块fs——文件操作api

// fs模块常用api // 读取文件 .写入文件 .追加文件. 拷贝文件 .删除文件 // 读取文件 // fs.readFile(path[, options], callback) // fs.readFileSync(path[, options]) const fs = require('fs') // 异步读取 fs.readFile('./test.json', (error, data) => { if (error) return var data = data.toStri

Hadoop学习笔记之二 文件操作

HDFS分布式文件系统:优点:支持超大文件存储.流式访问.一次写入多次读取.缺点:不适应大量小文件.不适应低时延的数据访问.不适应多用户访问任意修改文件. 1.hadoop用于大数据处理,在数据量较小时,并不适用于实时性强的任务,并不是所有的job放到hadoop上,性能都会提升. 2.大量小文件的情况下会极大的降低系统的性能,所以处理前需要先将少文件聚合成大文件,map的输出也应该首先combine在传输给reduce. 3.数据传输时的IO开销,存储在内存中还是硬盘中,节点之间共享数据的分发

C语言复习:文件操作

文件操作专题 C语言文件读写概念 文件分类 按文件的逻辑结构: 记录文件:由具有一定结构的记录组成(定长和不定长) 流式文件:由一个个字符(字节)数据顺序组成 按存储介质: 普通文件:存储介质文件(磁盘.磁带等) 设备文件:非存储介质(键盘.显示器.打印机等) 按数据的组织形式: 文本文件: ASCII文件,每个字节存放一个字符的ASCII码 二进制文件:数据按其在内存中的存储形式原样存放 每个文件都以文件名为标识,I/O设备的文件名是系统定义的,如: COM1或AUX--第一串行口,附加设备