Secure context: This feature is available only in secure contexts (HTTPS), in some or all supporting browsers.

The showOpenFilePicker() method of the Window interface shows a file picker that allows a user to select a file or multiple files and returns a handle for the file(s).


var FileSystemHandles = Window.showOpenFilePicker();


options Optional

An optional object containing options, which are as follows:

  • multiple: A Boolean. Default false. When set to true multiple files may be selected.
  • excludeAcceptAllOption:A Boolean. Default false. By default the picker should include an option to not apply any file type filters (instigated with the type option below). Setting this option to true means that option is not available.
  • types: An Array of allowed file types to pick. Each item is an object with the following options:
    • description: An optional description of the category of files types allowed.
    • accept: An Object with the keys set to the MIME type and the values an Array of file extensions (see below for an example).

Return value

A Array of FileSystemFileHandle objects.



An AbortError is thrown if a user dismisses the prompt without making a selection or if a file selected is deemed too sensitive or dangerous to be exposed to the website.


Here we set the options object for passing into the method. We'll allow a selection of image file types, with no option to allow for all files types, or multiple file selection.

const pickerOpts = {
  types: [
      description: 'Images',
      accept: {
        'image/*': ['.png', '.gif', '.jpeg', '.jpg']
  excludeAcceptAllOption: true,
  multiple: false

Next we can create an asynchronous function which show the file picker and return the selected file.

// create a reference for our file handle
let fileHandle;

async function getFile() {
  // open file picker, destructure the one element returned array
  [fileHandle] = await window.showOpenFilePicker(pickerOpts);

  // run code with our fileHandle


File System Access
# api-showopenfilepicker

Browser compatibility

BCD tables only load in the browser

See also