FileSystemWritableFileStream: write() method

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

The write() method of the FileSystemWritableFileStream interface writes content into the file the method is called on, at the current file cursor offset.

No changes are written to the actual file on disk until the stream has been closed. Changes are typically written to a temporary file instead. This method can also be used to seek to a byte point within the stream and truncate to modify the total bytes the file contains.





Can be either the file data to write, in the form of an ArrayBuffer, a TypedArray, a DataView, a Blob, a String object, or a string literal. Or an object containing the following properties:


A string that is one of the following: "write", "seek", or "truncate".


The file data to write. Can be an ArrayBuffer, a TypedArray, a DataView, a Blob, a String object, or a string literal. This property is required if type is set to write.


The byte position the current file cursor should move to if type seek is used. Can also be set with if type is write, in which case the write will start at the position.


An unsigned long value representing the amount of bytes the stream should contain. This property is required if type is set to truncate.

Return value

Promise which returns undefined.


NotAllowedError DOMException

Returned if PermissionStatus is not granted.


Returned if data is undefined, or if position or size aren't valid.

InvalidStateError DOMException

Returned if the position is set and larger than the bytes available.


This asynchronous function opens the 'Save File' picker, which returns a FileSystemFileHandle once a file is selected. From which a writable stream is then created using the FileSystemFileHandle.createWritable() method.

A user defined Blob is then written to the stream which is subsequently closed.

async function saveFile() {
  // create a new handle
  const newHandle = await window.showSaveFilePicker();

  // create a FileSystemWritableFileStream to write to
  const writableStream = await newHandle.createWritable();

  // write our file
  await writableStream.write(imgBlob);

  // close the file and write the contents to disk.
  await writableStream.close();

The following show different examples of options that can be passed into the write() method.

// just pass in the data (no options)

// writes the data to the stream from the determined position
writableStream.write({ type: "write", position, data });

// updates the current file cursor offset to the position specified
writableStream.write({ type: "seek", position });

// resizes the file to be size bytes long
writableStream.write({ type: "truncate", size });


File System Standard
# api-filesystemwritablefilestream-write

Browser compatibility

BCD tables only load in the browser

See also