Leslie Wu
Leslie Wu

Reputation: 770

How can I use Chrome App fileSystem API

I want to use chrome.fileSystem API to create a new file in C:/ or anywhere, but I cannot figure out how to use this API.

I cannot find any argument for file path, only thing is fileEntry, but how can I generate fileEntry with something like C://a/b/c?

Upvotes: 0

Views: 3021

Answers (2)

Ben Wells
Ben Wells

Reputation: 1892

Chrome apps have limitations - for security reasons - on what files can be accessed. Basically, the user needs to approve access from your app to the files and directories that are accessed.

The only way to get access to files outside of the app's sandbox is through a user gesture - that is, you need to ask the user for a file. You do this with chrome.fileSystem.chooseEntry.

If this isn't clear of obvious, maybe you could explain more about what you are trying to do with the files and we can give advice on the best way to do this. Usually chrome.fileSystem is not the best choice for data storage - there are other more convenient and sandboxed alterntives like chrome.storage.

Upvotes: 3

kzahel
kzahel

Reputation: 2785

It's a bit tricky to work with. But it follows the same model other languages use, except it's even tricker because of all the callbacks. This is a function I wrote to get a nested file entry, creating directories as it goes along. Maybe this can help you get started.

For this function, youd pass in a FileSystem that you'd get from something like chrome.fileSystem.chooseEntry with a directory type option, and path would be in your example ['a','b','c']

function recursiveGetEntry(filesystem, path, callback) {
  function recurse(e) {
      if (path.length == 0) {
          if (e.isFile) {
              callback(e)
          } else {
              callback({error:'file exists'})
          }
      } else if (e.isDirectory) {
          if (path.length > 1) {
              e.getDirectory(path.shift(), {create:true}, recurse, recurse)
          } else {
              e.getFile(path.shift(), {create:true}, recurse, recurse)
          }
      } else {
          callback({error:'file exists'})
      }
  }
  recurse(filesystem)
}

Upvotes: 1

Related Questions