9

Uncaught (in promise) TypeError: window.showOpenFilePicker() is not a function

I am trying to experiment with reading and writing in File System Web API but I keep getting TypeError Uncaught (in promise) TypeError: window.showOpenFilePicker is not a function, I have no idea what is going.

Here is react code snippet:

const FileReader = () => {
    const openThisFile = async () => {
        const [fileHandle] = await window.showOpenFilePicker(); // error: Property 'showOpenFilePicker' does not exist on type 'Window & typeof globalThis'
        console.log(fileHandle);
    };
    return (
        <div>
            <button onClick={openThisFile}>Open file</button>
        </div>
    );
};

export default FileReader;

And so I thought it's not working in react and then I tried Vanilla Javascript but still I keep getting TypeError Uncaught (in promise) TypeError: window.showOpenFilePicker is not a function in the console. Here is the code snippet.

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Open file</title>
    </head>
    <body>
        <button onclick="getFile()">Open file</button>
        <script>
            const pickerOpts = {
                types: [
                    {
                        description: "Images",
                        accept: {
                            "image/*": [".png", ".gif", ".jpeg", ".jpg"],
                        },
                    },
                ],
                excludeAcceptAllOption: true,
                multiple: false,
            };

            let fileHandle;
            async function getFile() {
                [fileHandle] = await window.showOpenFilePicker(pickerOpts);
                // run code with our fileHandle
            }
            console.log(fileHandle);
        </script>
    </body>
</html>

Any idea on what I am doing wrong?

Lagu Longa
  • 161
  • 1
  • 1
  • 9

2 Answers2

8

I suppose you are seeing the issue above because of the following:

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

Consider looking into the docs: https://developer.mozilla.org/en-US/docs/Web/API/Window/showOpenFilePicker

LandryNdong
  • 136
  • 4
  • 5
    I thought so, but then how can you develop in a local environment e.g localhost runs on HTTP, any workaround for this? – Lagu Longa Oct 16 '21 at 00:00
  • Local https with self signed certificate ? – Mathias Dolidon Feb 15 '22 at 11:46
  • @Lagu Longa Working with Opera Browser allows me to develop on localhost. I got burned when I first tried to release the code on the server in the company network, there I got `TypeError: window.showOpenFilePicker is not a function` as well. – nhaggen Sep 08 '22 at 14:30
1

The problem is most likely your browser. As of March 2023, this feature is only supported on three browsers (Chrome, Edge, Opera), and is classed as an experimental feature even on those.

See the API doc: https://developer.mozilla.org/en-US/docs/Web/API/Window/showOpenFilePicker

One Guy Hacking
  • 1,176
  • 11
  • 16