рдлрд╝рд╛рдЗрд▓рд╕рд┐рд╕реНрдЯрдо рдПрдкреАрдЖрдИ рдФрд░ рдлрд╝рд╛рдЗрд▓ рдПрдкреАрдЖрдИ: рд╕рдордЭреЗрдВ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

HTML5 Powered with Performance & Integration, and Offline & Storage

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдлрд╛рдЗрд▓рд╕рд┐рд╕реНрдЯрдо рдПрдкреАрдЖрдИ рдФрд░ рдлрд╛рдЗрд▓ рдПрдкреАрдЖрдИ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЗрд╕рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВ рдФрд░ рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рдЪреАрдЬреЛрдВ рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реВрдВред рдпрд╣ рд▓реЗрдЦ html5rocks ( 1 , 2 , 3 ) рдХреЗ рд╕рд╛рде рд╕рд╛рдордЧреНрд░рд┐рдпреЛрдВ рдХрд╛ рд╕рдВрдХрд▓рди рд╣реИред рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд╕рднреА рдбреЗрдореЛ рдкрд╣рд▓реЗ рджреЛ рд▓рд┐рдВрдХ рдкрд░ рджреЗрдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рддреАрд╕рд░рд╛ рд▓рд┐рдВрдХ рдХрдИ рджрд┐рд▓рдЪрд╕реНрдк рдбреЗрдореЛ рднреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЦреИрд░, рдЕрдм рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рддреЗ рд╣реИрдВред



рдПрдХ рдкрд░рд┐рдЪрдп рдХреЗ рд░реВрдк рдореЗрдВ



FileSystem API рдФрд░ File API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ , рдПрдХ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╕реНрдерд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдмрдирд╛, рдкрдврд╝, рджреЗрдЦ рдФрд░ рд▓рд┐рдЦ рд╕рдХрддрд╛ рд╣реИред



рдПрдкреАрдЖрдИ рд╡рд┐рд╡рд░рдг рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд░реНрдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:



рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрдж рдЬрд┐рдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ:

  1. рдлрд╝рд╛рдЗрд▓ - рдлрд╝рд╛рдЗрд▓ рд╣реА; рдЖрдкрдХреЛ рдирд╛рдо, рдЖрдХрд╛рд░, mimetype рдФрд░ рдЕрдзрд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдРрд╕реА рдХреЗрд╡рд▓ рдкрдврд╝рдиреЗ рдпреЛрдЧреНрдп рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
  2. FileList - рдлрд╝рд╛рдЗрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреА "рд╕рд░рдгреА"ред
  3. рдмреВрдБрдж - рдПрдХ рдЗрдХрд╛рдИ рдЬреЛ рдЖрдкрдХреЛ рдмрд╛рдЗрдЯреНрд╕ рджреНрд╡рд╛рд░рд╛ рдлрд╝рд╛рдЗрд▓ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред


рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдорд░реНрдерди рдФрд░ рднрдВрдбрд╛рд░рдг рд╕реАрдорд╛


рд▓реЗрдЦрди рдХреЗ рд╕рдордп, рдХреЗрд╡рд▓ Google Chrome 9+ рдореЗрдВ рдлрд╝рд╛рдЗрд▓рд╕рд┐рд╕реНрдЯрдо рдПрдкреАрдЖрдИ рдХрд╛ рдХрд╛рд░реНрдпрд╢реАрд▓ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рдФрд░ рдлрд┐рд▓рд╣рд╛рд▓ рднрдВрдбрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓реЛрдВ рдФрд░ рдХреЛрдЯрд╛ рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕рдВрд╡рд╛рдж рдмреЙрдХреНрд╕ рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ --unlimited-quota-for-files рдзреНрд╡рдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА (рдХреНрд░реЛрдо рд╡реЗрдм рд╕реНрдЯреЛрд░ рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрд╕реАрдорд┐рдд рд╕реНрдЯреЙрд░реЗрдЬ рдЕрдиреБрдорддрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рдХрдЯ рд╣реЛрдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛)ред рд▓реЗрдХрд┐рди рд╕рдм рдХреБрдЫ рдмрджрд▓ рд░рд╣рд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЬрд▓реНрдж рд╣реА рдЙрди рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдорд┐рд▓реЗрдЧрд╛ рдЬреЛ рдЖрд╡реЗрджрди рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдВрдЧреЗред



рдпрджрд┐ рдЖрдкрдиреЗ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░ рдмрд╣рд╕ рдХреА рд╣реИ рддреЛ рдЖрдкрдХреЛ --allow-file-access-from-files рдлреНрд▓реИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ : // ред рдпрджрд┐ рдЗрд╕ рдзреНрд╡рдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ SECURITY_ERR рдпрд╛ QUOTA_EXCEEDED_ERR рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред



рд╣рдо рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рд╕реЗ рдЕрдкреАрд▓ рдХрд░рддреЗ рд╣реИрдВ



рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдорд░реНрдерди рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ

//   File API if (window.File && window.FileReader && window.FileList && window.Blob) { //  } else { alert('File API    '); }
      
      





рдПрдХ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдирд┐рдореНрди рд╡рд┐рдВрдбреЛ.requestFileSystem () рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо (рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рдПрдХ рд╕реАрдорд┐рдд "рд╕реИрдВрдбрдмреЙрдХреНрд╕") рдореЗрдВ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реИ:

 window.requestFileSystem(type, size, successCallback, opt_errorCallback)
      
      





рдЯрд╛рдЗрдк

рд╕рдВрдЧреНрд░рд╣рдг рдирд┐рдпрдо, рдЙрдкрд▓рдмреНрдз рд╡рд┐рдВрдбреЛ ред рдордВрджрд┐рд░ рдФрд░ рдЦрд┐рдбрд╝рдХреА ред рд╡реНрдпрдХреНрддрд┐рдЧрдд рдорд╛рди ред TEMPORARY рдХреБрдВрдЬреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдбреЗрдЯрд╛ рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд╡рд┐рд╡реЗрдХ рдкрд░ рд╣рдЯрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрдерд╛рди рдирд╣реАрдВ рд╣реИ)ред рдпрджрд┐ PERSISTENT рдХреБрдВрдЬреА рд╕реЗрдЯ рд╣реИ, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рдмрд╛рдж рд╣реА рдбреЗрдЯрд╛ рдХреЛ рд╕рд╛рдлрд╝ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



рдЖрдХрд╛рд░

рднрдВрдбрд╛рд░рдг рдХреЗ рдЖрдХрд╛рд░ (рдмрд╛рдЗрдЯреНрд╕) рдореЗрдВ рдЬреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред



successCallback

рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рдлрд▓ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рддрд░реНрдХ рдлрд╝рд╛рдЗрд▓рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИред



opt_errorCallback

рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рдиред рдпрд╣ рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдПрдХреНрд╕реЗрд╕ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реЛрддреА рд╣реИрдВред рдкреИрд░рд╛рдореАрдЯрд░ FileError рдкреНрд░рдХрд╛рд░ рд╣реИред



рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЗ рднреАрддрд░ рдкрд╣рд▓реА рдмрд╛рд░ requestFileSystem () рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрд╕ рд╕рдордп рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдмрдирд╛рдИ рдЬрд╛рдПрдЧреАред рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдпрд╣ рднрдВрдбрд╛рд░ рдмрдВрдж рд╣реИ рдФрд░ рдХрд┐рд╕реА рдЕрдиреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рддрдХ рдЗрд╕рдХреА рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реЛрдЧреАред рдЗрд╕рдХрд╛ рдпрд╣ рднреА рдЕрд░реНрде рд╣реИ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣рд╛рд░реНрдб рдбреНрд░рд╛рдЗрд╡ рдкрд░ рд╕реНрдерд┐рдд рдЕрдиреНрдп рдлрд╝рд╛рдЗрд▓реЛрдВ рдФрд░ рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдХреЛ рдирд╣реАрдВ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред



рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

 function onInitFs(fs) { console.log('Opened file system: ' + fs.name); } window.requestFileSystem(window.PERSISTENT, 5*1024*1024 /*5MB*/, onInitFs, errorHandler);
      
      





FileSystem рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рднреА рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ API рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рд╣реИ LocalFileSystemSync рдЗрдВрдЯрд░рдлрд╝реЗрд╕, рдЬрд┐рд╕реЗ рд╡реЗрдм рд╡рд░реНрдХрд░реНрд╕ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЗрд╕ рдПрдкреАрдЖрдИ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред



RequestFileSystem () рд╡рд┐рдзрд┐ рдкрд░ рд╡рд╛рдкрд╕ рд▓реМрдЯрдирд╛, рдпрд╣ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рд╡реЗрд░рд┐рдПрдВрдЯ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ:

 function errorHandler(e) { var msg = ''; switch (e.code) { case FileError.QUOTA_EXCEEDED_ERR: msg = 'QUOTA_EXCEEDED_ERR'; break; case FileError.NOT_FOUND_ERR: msg = 'NOT_FOUND_ERR'; break; case FileError.SECURITY_ERR: msg = 'SECURITY_ERR'; break; case FileError.INVALID_MODIFICATION_ERR: msg = 'INVALID_MODIFICATION_ERR'; break; case FileError.INVALID_STATE_ERR: msg = 'INVALID_STATE_ERR'; break; default: msg = 'Unknown Error'; break; }; console.log('Error: ' + msg); }
      
      





рд╡рд░реНрдгрд┐рдд рдЙрджрд╛рд╣рд░рдг рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдпрд╣ рдЙрднрд░рддреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдХреЗ рдХрд╛рдо рдХреА рддреИрдпрд╛рд░реА рд╣реИред



рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ



рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, FileEntry рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдХреА рдХрдИ рд╡рд┐рдзрд┐рдпрд╛рдВ рдФрд░ рдЧреБрдг рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо рдирд┐рдпрдорд┐рдд рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдЙрдиреНрд╣реЗрдВ рдиреАрдЪреЗ рджреЗрддреЗ рд╣реИрдВ:

 fileEntry.isFile === true fileEntry.isDirectory === false fileEntry.name fileEntry.fullPath ... fileEntry.getMetadata(successCallback, opt_errorCallback); fileEntry.remove(successCallback, opt_errorCallback); fileEntry.moveTo(dirEntry, opt_newName, opt_successCallback, opt_errorCallback); fileEntry.copyTo(dirEntry, opt_newName, opt_successCallback, opt_errorCallback); fileEntry.getParent(successCallback, opt_errorCallback); fileEntry.toURI(opt_mimeType); // Currently not implemented in Google Chrome 9. fileEntry.file(successCallback, opt_errorCallback); fileEntry.createWriter(successCallback, opt_errorCallback); ...
      
      





рдЖрдЗрдП FileEntry рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ рджреЗрдЦреЗрдВред



рдлрд╝рд╛рдЗрд▓ рдирд┐рд░реНрдорд╛рдг


рдЖрдк DirectoryFntry рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░ getFile () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рдкреНрдд рдпрд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рдмрд╛рдж, рдХреЙрд▓рдмреИрдХ рдиреЗ рдПрдХ рдлрд╛рдЗрд▓рд╕рд┐рд╕реНрдЯрдо рдСрдмреНрдЬреЗрдХреНрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реАрдЗрдиреНрд╕реНрдЯреНрд░реА (fs.root) рдХреЛ рд▓реМрдЯрд╛рдпрд╛, рдЬреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд░реВрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИред



рдирд┐рдореНрди рдХреЛрдб рдПрдХ рдЦрд╛рд▓реА log.txt рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдЧрд╛:

 function onInitFs(fs) { fs.root.getFile('log.txt', {create: true, exclusive: true}, function(fileEntry) { // fileEntry     // fileEntry.isFile === true // fileEntry.name == 'log.txt' // fileEntry.fullPath == '/log.txt' }, errorHandler); } window.requestFileSystem(window.PERSISTENT, 1024*1024, onInitFs, errorHandler);
      
      





рддреЛ, рдлрд╝рд╛рдЗрд▓ рднрдВрдбрд╛рд░рдг рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдорд╛рд░реЗ рд╣рд╛рдереЛрдВ рдореЗрдВ рдлрд╝рд╛рдЗрд▓рд╕рд┐рд╕реНрдЯрдо рд╣реИред рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░, рд╣рдо fs.root.getFile () рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдирд╛рдо рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реБрдП рдЬрд┐рд╕реЗ рдЖрдк рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдПрдХ рд░рд┐рд╢реНрддреЗрджрд╛рд░ рдФрд░ рдПрдХ рдкреВрд░реНрдг рдорд╛рд░реНрдЧ рджреЛрдиреЛрдВ рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ - рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╕рдЪ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рддреНрд░реБрдЯрд┐рдкреВрд░реНрдг рд╣реЛрдЧрд╛ рдпрджрд┐ рдЙрд╕рдХрд╛ рдореВрд▓ рдлрд╝реЛрд▓реНрдбрд░ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред GetFile () рд╡рд┐рдзрд┐ рдХрд╛ рджреВрд╕рд░рд╛ рддрд░реНрдХ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ рдЬреЛ рдЙрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЙрд╕ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрдЧрд╛ рдпрджрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЖрдк рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред



рдирд╛рдо рд╕реЗ рдлрд╛рдЗрд▓ рдкрдврд╝рдирд╛


рдирд┐рдореНрди рдХреЛрдб "log.txt" рдлрд╝рд╛рдЗрд▓ рддрдХ рдкрд╣реБрдБрдЪрддрд╛ рд╣реИ рдФрд░ FileReader API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╕рднреА рд╕рд╛рдордЧреНрд░реА рдХреЛ <textarea> рдмреНрд▓реЙрдХ рдкрд░ рд▓рд┐рдЦрддрд╛ рд╣реИред рдпрджрд┐ рдлрд╝рд╛рдЗрд▓ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рддреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдбрд╛рд▓реА рдЬрд╛рдПрдЧреАред

 function onInitFs(fs) { fs.root.getFile('log.txt', {}, function(fileEntry) { fileEntry.file(function(file) { var reader = new FileReader(); reader.onloadend = function(e) { var txtArea = document.createElement('textarea'); txtArea.value = this.result; document.body.appendChild(txtArea); }; reader.readAsText(file); }, errorHandler); }, errorHandler); } window.requestFileSystem(window.PERSISTENT, 1024*1024, onInitFs, errorHandler);
      
      





FileReader, рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрд░реАрдХреЗ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:



рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдЫрд╡рд┐ рдХреЛ рдкрдврд╝реЗрдВрдЧреЗ рдФрд░ рдЙрд╕рдХрд╛ рдердВрдмрдиреЗрд▓ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВрдЧреЗ:

 <style> .thumb { height: 75px; border: 1px solid #000; margin: 10px 5px 0 0; } </style> <input type="file" id="files" name="files[]" multiple /> <output id="list"></output> <script> function handleFileSelect(evt) { var files = evt.target.files; // FileList object // Loop through the FileList and render image files as thumbnails. for (var i = 0, f; f = files[i]; i++) { // Only process image files. if (!f.type.match('image.*')) { continue; } var reader = new FileReader(); // Closure to capture the file information. reader.onload = (function(theFile) { return function(e) { // Render thumbnail. var span = document.createElement('span'); span.innerHTML = ['<img class="thumb" src="', e.target.result, '" title="', theFile.name, '"/>'].join(''); document.getElementById('list').insertBefore(span, null); }; })(f); // Read in the image file as a data URL. reader.readAsDataURL(f); } } document.getElementById('files').addEventListener('change', handleFileSelect, false); </script>
      
      





рдХрднреА-рдХрднреА рд╣рдореЗрдВ рдкреВрд░реА рдлрд╝рд╛рдЗрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдХреЗрд╡рд▓ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП File.slice (start_byte, length) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред

рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:

 var blob = file.slice(startingByte, length); reader.readAsBinaryString(blob);
      
      





рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдпрд╛ рддреЛ рд╡рд╛рдВрдЫрд┐рдд рдмрд╛рдЗрдЯреНрд╕ рдпрд╛ рдкреВрд░реА рдлрд╝рд╛рдЗрд▓ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред Onloadend рдФрд░ evt.target.readyState рдкрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдзреНрдпрд╛рди рджреЗрдВ , рдЬреЛ рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдСрдирд▓реЛрдб рдШрдЯрдирд╛ рдХреЛ рдмрджрд▓ рджреЗрдЧрд╛ред (рдиреАрдЪреЗ рдХреА рдШрдЯрдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ)ред

 <style> #byte_content { margin: 5px 0; max-height: 100px; overflow-y: auto; overflow-x: hidden; } #byte_range { margin-top: 5px; } </style> <input type="file" id="file" name="file" /> Read bytes: <span class="readBytesButtons"> <button data-startbyte="0" data-endbyte="4">1-5</button> <button data-startbyte="5" data-endbyte="14">6-15</button> <button data-startbyte="6" data-endbyte="7">7-8</button> <button>entire file</button> </span> <div id="byte_range"></div> <div id="byte_content"></div> <script> function readBlob(opt_startByte, opt_stopByte) { var files = document.getElementById('files').files; if (!files.length) { alert('Please select a file!'); return; } var file = files[0]; var start = opt_startByte || 0; var stop = opt_stopByte || file.size - 1; var reader = new FileReader(); // If we use onloadend, we need to check the readyState. reader.onloadend = function(evt) { if (evt.target.readyState == FileReader.DONE) { // DONE == 2 document.getElementById('byte_content').textContent = evt.target.result; document.getElementById('byte_range').textContent = ['Read bytes: ', start + 1, ' - ', stop + 1, ' of ', file.size, ' byte file'].join(''); } }; var length = (stop - start) + 1; var blob = file.slice(start, length); reader.readAsBinaryString(blob); } document.querySelector('.readBytesButtons').addEventListener('click', function(evt) { if (evt.target.tagName.toLowerCase() == 'button') { var startByte = evt.target.getAttribute('data-startbyte'); var endByte = evt.target.getAttribute('data-endbyte'); readBlob(startByte, endByte); } }, false); </script>
      
      





рдЕрдм рдШрдЯрдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред FileReader рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдШрдЯрдирд╛ рдкреНрд░рдХрд╛рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:

рдЬрдм рдЖрдк рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рддреЛ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:

 <style> #progress_bar { margin: 10px 0; padding: 3px; border: 1px solid #000; font-size: 14px; clear: both; opacity: 0; -moz-transition: opacity 1s linear; -o-transition: opacity 1s linear; -webkit-transition: opacity 1s linear; } #progress_bar.loading { opacity: 1.0; } #progress_bar .percent { background-color: #99ccff; height: auto; width: 0; } </style> <input type="file" id="file" name="file" /> <button onclick="abortRead();">Cancel read</button> <div id="progress_bar"><div class="percent">0%</div></div> <script> var reader; var progress = document.querySelector('.percent'); function abortRead() { reader.abort(); } function errorHandler(evt) { switch(evt.target.error.code) { case evt.target.error.NOT_FOUND_ERR: alert('File Not Found!'); break; case evt.target.error.NOT_READABLE_ERR: alert('File is not readable'); break; case evt.target.error.ABORT_ERR: break; // noop default: alert('An error occurred reading this file.'); }; } function updateProgress(evt) { // evt is an ProgressEvent. if (evt.lengthComputable) { var percentLoaded = Math.round((evt.loaded / evt.total) * 100); // Increase the progress bar length. if (percentLoaded < 100) { progress.style.width = percentLoaded + '%'; progress.textContent = percentLoaded + '%'; } } } function handleFileSelect(evt) { // Reset progress indicator on new file selection. progress.style.width = '0%'; progress.textContent = '0%'; reader = new FileReader(); reader.onerror = errorHandler; reader.onprogress = updateProgress; reader.onabort = function(e) { alert('File read cancelled'); }; reader.onloadstart = function(e) { document.getElementById('progress_bar').className = 'loading'; }; reader.onload = function(e) { // Ensure that the progress bar displays 100% at the end. progress.style.width = '100%'; progress.textContent = '100%'; setTimeout("document.getElementById('progress_bar').className='';", 2000); } // Read in the image file as a binary string. reader.readAsBinaryString(evt.target.files[0]); } document.getElementById('files').addEventListener('change', handleFileSelect, false); </script>
      
      







рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦреЗрдВ


рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдПрдХ "log.txt" рдлрд╝рд╛рдЗрд▓ (рдпрджрд┐ рдпрд╣ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ) рдмрдирд╛рдПрдВрдЧреЗ рдФрд░ рдЙрд╕ рдкрд░ 'рдЗрдкреНрд╕рдо рд▓реЛрд░рдо' рд▓рд┐рдЦреЗрдВрдЧреЗред

 function onInitFs(fs) { fs.root.getFile('log.txt', {create: true}, function(fileEntry) { fileEntry.createWriter(function(fileWriter) { fileWriter.onwriteend = function(e) { console.log('Write completed.'); }; fileWriter.onerror = function(e) { console.log('Write failed: ' + e.toString()); }; var bb = new BlobBuilder(); bb.append('Ipsum Lorem'); fileWriter.write(bb.getBlob('text/plain')); }, errorHandler); }, errorHandler); } window.requestFileSystem(window.PERSISTENT, 1024*1024, onInitFs, errorHandler);
      
      





рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдо рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП createWriter () рд╡рд┐рдзрд┐ рдХрд╣рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдПрдХ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓реЗрдЦрди рдХреЗ рдЕрдВрдд рдФрд░ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рдирд┐рд░реНрдорд╛рдг рдХреА рдШрдЯрдирд╛рдУрдВ рдХреЛ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВред



рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдбреЗрдЯрд╛ рдЬреЛрдбрд╝реЗрдВ


рдирд┐рдореНрди рдХреЛрдб рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдВрдд рдореЗрдВ 'рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб' рдХреЛ рдЬреЛрдбрд╝ рджреЗрдЧрд╛ред рдпрджрд┐ рдХреЛрдИ рдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рд╣реИ, рддреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдбрд╛рд▓реА рдЬрд╛рддреА рд╣реИред

 function onInitFs(fs) { fs.root.getFile('log.txt', {create: false}, function(fileEntry) { fileEntry.createWriter(function(fileWriter) { fileWriter.seek(fileWriter.length); // Start write position at EOF. var bb = new BlobBuilder(); bb.append('Hello World'); fileWriter.write(bb.getBlob('text/plain')); }, errorHandler); }, errorHandler); } window.requestFileSystem(window.PERSISTENT, 1024*1024, onInitFs, errorHandler);
      
      







рдЪрдпрдирд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдкреНрд░рддрд┐рдпрд╛рдВ рдмрдирд╛рдПрдБ


рдирд┐рдореНрди рдХреЛрдб рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ <рдЗрдирдкреБрдЯ рдкреНрд░рдХрд╛рд░ = "рдлрд╝рд╛рдЗрд▓" рдПрдХрд╛рдзрд┐рдХ> рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдкреНрд░рддрд┐рдпрд╛рдВ рдмрдирд╛рддрд╛ рд╣реИред

 <input type="file" id="myfile" multiple />
      
      





 document.querySelector('#myfile').onchange = function(e) { var files = this.files; window.requestFileSystem(window.TEMPORARY, 1024*1024, function(fs) { for (var i = 0, file; file = files[i]; ++i) { (function(f) { fs.root.getFile(file.name, {create: true, exclusive: true}, function(fileEntry) { fileEntry.createWriter(function(fileWriter) { fileWriter.write(f); // Note: write() can take a File or Blob object. }, errorHandler); }, errorHandler); })(file); } }, errorHandler); };
      
      





рдлрд╝рд╛рдЗрд▓ рдЪрдпрди рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк HTML5 рдбреНрд░реИрдЧ рдПрдВрдб рдбреНрд░реЙрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



 <div id="drop_zone">Drop files here</div> <output id="list"></output> <script> function handleFileSelect(evt) { evt.stopPropagation(); evt.preventDefault(); var files = evt.dataTransfer.files; // FileList object. // files is a FileList of File objects. List some properties. var output = []; for (var i = 0, f; f = files[i]; i++) { output.push('<li><strong>', f.name, '</strong> (', f.type || 'n/a', ') - ', f.size, ' bytes, last modified: ', f.lastModifiedDate.toLocaleDateString(), '</li>'); } document.getElementById('list').innerHTML = '<ul>' + output.join('') + '</ul>'; } function handleDragOver(evt) { evt.stopPropagation(); evt.preventDefault(); } // Setup the dnd listeners. var dropZone = document.getElementById('drop_zone'); dropZone.addEventListener('dragover', handleDragOver, false); dropZone.addEventListener('drop', handleFileSelect, false); </script>
      
      







рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ


рдирд┐рдореНрди рдХреЛрдб 'log.txt' рдХреЛ рд╣рдЯрд╛ рджреЗрдЧрд╛ред

 window.requestFileSystem(window.PERSISTENT, 1024*1024, function(fs) { fs.root.getFile('log.txt', {create: false}, function(fileEntry) { fileEntry.remove(function() { console.log('File removed.'); }, errorHandler); }, errorHandler); }, errorHandler);
      
      







рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ



рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ DirectoryEntry рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ FileEntry рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЧреБрдг рд╣реЛрддреЗ рд╣реИрдВ (рд╡реЗ рджреЛрдиреЛрдВ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ)ред рдиреАрдЪреЗ DirectoryEntry рдХреЗ рдЧреБрдгреЛрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рдмрдирд╛рдПрдВред

 dirEntry.isDirectory === true //      FileEntry ... var dirReader = dirEntry.createReader(successCallback, opt_errorCallback); dirEntry.getFile(path, opt_flags, opt_successCallback, opt_errorCallback); dirEntry.getDirectory(path, opt_flags, opt_successCallback, opt_errorCallback); dirEntry.removeRecursively(successCallback, opt_errorCallback); ...
      
      







рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдирд╛


рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдФрд░ рдЙрди рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП, DirectoryEntry рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ getDirectory () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдЖрдк рдирд╛рдо рдФрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рджреЛрдиреЛрдВ рдкрде рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



рд░реВрдЯ рдореЗрдВ "MyPictures" рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдПрдБ:

 window.requestFileSystem(window.PERSISTENT, 1024*1024, function(fs) { fs.root.getDirectory('MyPictures', {create: true}, function(dirEntry) { ... }, errorHandler); }, errorHandler);
      
      







рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛


рдЙрдкрдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдирд╛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд╕рдорд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдпрджрд┐ рдореВрд▓ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ, рддреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдбрд╛рд▓реА рдЬрд╛рдПрдЧреАред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╕реАрдорд╛ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреИрд╕реЗ рдЬрд╛рдирд╛ рд╣реИ:

 var path = 'music/genres/jazz/'; function createDir(rootDirEntry, folders) { // './'  '/' if (folders[0] == '.' || folders[0] == '') { folders = folders.slice(1); } rootDirEntry.getDirectory(folders[0], {create: true}, function(dirEntry) { if (folders.length) { createDir(dirEntry, folders.slice(1)); } }, errorHandler); }; function onInitFs(fs) { createDir(fs.root, path.split('/')); // fs.root is a DirectoryEntry. } window.requestFileSystem(window.PERSISTENT, 1024*1024, onInitFs, errorHandler);
      
      





рдЕрдм рд╣рдордиреЗ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ "рд╕рдВрдЧреАрдд / рд╢реИрд▓рд┐рдпреЛрдВ / рдЬреИрдЬрд╝" рдмрдирд╛рдИ рд╣реИ рдФрд░ рд╣рдо рдХрд┐рд╕реА рднреА рд╕реНрддрд░ рдкрд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдореЗрдВ рдирдИ рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

 window.requestFileSystem(window.PERSISTENT, 1024*1024, function(fs) { fs.root.getFile('/music/genres/jazz/song.mp3', {create: true}, function(fileEntry) { ... }, errorHandler); }, errorHandler);
      
      







рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВ


рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ, рдЖрдкрдХреЛ рдПрдХ DirectoryReader рдмрдирд╛рдиреЗ рдФрд░ рдЙрд╕рдХреЗ рд░реАрдбрдПрдВрдЯреНрд░реА () рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд╛рдд рдХреА рдХреЛрдИ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЪрдпрдирд┐рдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреА рдкреВрд░реА рд╕рд╛рдордЧреНрд░реА рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреА (!!!)ред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЬрдм рддрдХ рд░рд┐рдЬрд▓реНрдЯ рдЦрд╛рд▓реА рди рд╣реЛ, рдЖрдкрдХреЛ DirectoryReader.readEntries () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдПрдХ рдЙрджрд╛рд╣рд░рдг:

 <ul id="filelist"></ul>
      
      





 function toArray(list) { return Array.prototype.slice.call(list || [], 0); } function listResults(entries) { var fragment = document.createDocumentFragment(); entries.forEach(function(entry, i) { var img = entry.isDirectory ? '<img src="folder-icon.gif">' : '<img src="file-icon.gif">'; var li = document.createElement('li'); li.innerHTML = [img, '<span>', entry.name, '</span>'].join(''); fragment.appendChild(li); }); document.querySelector('#filelist').appendChild(fragment); } function onInitFs(fs) { var dirReader = fs.root.createReader(); var entries = []; var readEntries = function() { dirReader.readEntries (function(results) { if (!results.length) { listResults(entries.sort()); } else { entries = entries.concat(toArray(results)); readEntries(); } }, errorHandler); }; readEntries(); } window.requestFileSystem(window.PERSISTENT, 1024*1024, onInitFs, errorHandler);
      
      







рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╣рдЯрд╛рдПрдВ


рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП, DirectoryEntry.remove () рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВред рдпрд╣ рдЬрд╛рдирдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдПрдХ рдЧреИрд░-рд░рд┐рдХреНрдд рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдбрд╛рд▓реА рдЬрд╛рдПрдЧреАред



"/ рд╕рдВрдЧреАрдд / рд╢реИрд▓рд┐рдпреЛрдВ /" рд╕реЗ рдЦрд╛рд▓реА рдЬреИрдЬрд╝ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рд╣рдЯрд╛рдПрдВ:

 window.requestFileSystem(window.PERSISTENT, 1024*1024, function(fs) { fs.root.getDirectory('music/genres/jazz', {}, function(dirEntry) { dirEntry.remove(function() { console.log('Directory removed.'); }, errorHandler); }, errorHandler); }, errorHandler);
      
      







рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рдкреБрди: рд╣рдЯрд╛ рджреЗрдВ


рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдЧреИрд░-рдЦрд╛рд▓реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рднреА рдЗрд╕реЗ рд╣рдЯрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдЯрд╛рдиреЗ рд╡рд╛рд▓рд╛ () рд╡рд┐рдзрд┐ рдЖрдкрдХреА рдорджрдж рдХрд░реЗрдЧреА, рдЬреЛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдФрд░ рдЗрд╕рдХреА рд╕рднреА рд╕рд╛рдордЧреНрд░реА рджреЛрдиреЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрдЧрд╛ред



рд╣рдо рдЗрд╕ рдСрдкрд░реЗрд╢рди рдХреЛ "рд╕рдВрдЧреАрдд" рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рд╕рд╛рде рдХрд░рддреЗ рд╣реИрдВ:

 window.requestFileSystem(window.PERSISTENT, 1024*1024, function(fs) { fs.root.getDirectory('/misc/../music', {}, function(dirEntry) { dirEntry.removeRecursively(function() { console.log('Directory removed.'); }, errorHandler); }, errorHandler); }, errorHandler);
      
      







рдХреЙрдкреА, рдирд╛рдо рдмрджрд▓реЗрдВ рдФрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ



FileEntry рдФрд░ DirectoryEntry рдЗрд╕ рдкрд╣рд▓реВ рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕рдорд╛рди рд╣реИрдВред



рдкреНрд░рддрд┐рд▓рд┐рдкрд┐


FileEntry рдФрд░ DirectoryEntry рджреЛрдиреЛрдВ рдореЗрдВ рдХреЙрдкреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ copyTo () рд╡рд┐рдзрд┐ рд╣реИред рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡рд┐рдзрд┐ рдкреБрди: рд╕рднреА рд╕рд╛рдордЧреНрд░реА рдмрдирд╛ рджреЗрдЧреАред



рдПрдХ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ "me.png" рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдПрдБ:

 function copy(cwd, src, dest) { cwd.getFile(src, {}, function(fileEntry) { cwd.getDirectory(dest, {}, function(dirEntry) { dirEntry.copyTo(dirEntry); }, errorHandler); }, errorHandler); } window.requestFileSystem(window.PERSISTENT, 1024*1024, function(fs) { copy(fs.root, '/folder1/me.png', 'folder2/mypics/'); }, errorHandler);
      
      







рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдпрд╛ рдирд╛рдо рдмрджрд▓рдирд╛


FileEntry and DirectoryEntry рдореЗрдВ рдПрдХ MoveTo () рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдФрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдФрд░ рдирд╛рдо рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рдкрд╣рд▓рд╛ рддрд░реНрдХ рдореВрд▓ рдлрд╝реЛрд▓реНрдбрд░ рд╣реИ, рджреВрд╕рд░рд╛ (рд╡реИрдХрд▓реНрдкрд┐рдХ) рдкреИрд░рд╛рдореАрдЯрд░ рдирдпрд╛ рдирд╛рдо рд╣реИред



"Me.png" рдХреЛ "you.png" рдирд╛рдо рджреЗрдВ:

 function rename(cwd, src, newName) { cwd.getFile(src, {}, function(fileEntry) { fileEntry.moveTo(cwd, newName); }, errorHandler); } window.requestFileSystem(window.PERSISTENT, 1024*1024, function(fs) { rename(fs.root, 'me.png', 'you.png'); }, errorHandler);
      
      







рд░реВрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ "me.png" рдХреЛ "newfolder" рдкрд░ рд▓реЗ рдЬрд╛рдПрдВред

 function move(src, dirName) { fs.root.getFile(src, {}, function(fileEntry) { fs.root.getDirectory(dirName, {}, function(dirEntry) { fileEntry.moveTo(dirEntry); }, errorHandler); }, errorHandler); } window.requestFileSystem(window.PERSISTENT, 1024*1024, function(fs) { move('/me.png', 'newfolder/'); }, errorHandler);
      
      







рдорд╛рдорд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ


рдПрдЪрдЯреАрдПрдордПрд▓ 5 рд╕реНрдерд╛рдиреАрдп рдбреЗрдЯрд╛ рднрдВрдбрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдХрдИ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд╛рдЗрд▓рд╕рд┐рд╕реНрдЯрдо рдЗрд╕ рдорд╛рдпрдиреЗ рдореЗрдВ рдЕрд▓рдЧ рд╣реИ рдХрд┐ рдпрд╣ рдЙрди рдЬрд░реВрд░рддреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдореВрд▓ рд░реВрдк рд╕реЗ, рдпрд╣ рдПрдХ рдРрд╕реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рдХреА рдПрдХ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ / рдпрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдмрд╛рд╣рд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рддрдХ рдлрд╝рд╛рдЗрд▓ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред



рдпрд╣рд╛рдВ рд╕рдВрднрд╛рд╡рд┐рдд рдЙрдкрдпреЛрдЧреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рджреА рдЧрдИ рд╣реИ:

  1. рдЕрдкрд▓реЛрдбрд░ рдлрд╝рд╛рдЗрд▓реЗрдВ
  2. рдореАрдбрд┐рдпрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЧреЗрдо рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди
  3. рдСрдлрд╝рд▓рд╛рдЗрди рдореЛрдб рдХреЗ рд╕рд╛рде рдСрдбрд┐рдпреЛ / рдлреЛрдЯреЛ рд╕рдВрдкрд╛рджрдХ
  4. рдСрдлрд╝рд▓рд╛рдЗрди рд╡реАрдбрд┐рдпреЛ рдкреНрд▓реЗрдпрд░
  5. рдСрдлрд╝рд▓рд╛рдЗрди рдИрдореЗрд▓ рдХреНрд▓рд╛рдЗрдВрдЯ



All Articles