--- sidebar_position: 3 slug: /file-input --- import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import UppyCdnExample from '/src/components/UppyCdnExample'; # File input The `@uppy/file-input` plugin is the most barebones UI for selecting files — it shows a single button that, when clicked, opens up the browser’s file selector. ## When should I use it? When you want users to select files from their local machine with a minimal UI. ## Install ```shell npm install @uppy/file-input ``` ```shell yarn add @uppy/file-input ``` {` import { Uppy, FileInput } from "{{UPPY_JS_URL}}" const uppy = new Uppy() uppy.use(FileInput, { target: document.body }) `} ## Use ```js showLineNumbers import Uppy from '@uppy/core'; import FileInput from '@uppy/file-input'; import '@uppy/core/dist/style.min.css'; import '@uppy/file-input/dist/style.css'; new Uppy().use(FileInput, { target: '#uppy-file-input' }); ``` :::note The `@uppy/file-input` plugin includes some basic styles for use with the [`pretty`](#pretty-true) option, like shown in the [example](/examples/xhrupload). You can also choose not to use it and provide your own styles instead. Import general Core styles from `@uppy/core/dist/style.css` first, then add the File Input styles from `@uppy/file-input/dist/style.css`. A minified version is also available as `style.min.css` at the same path. The way to do import depends on your build system. ::: ## API ### Options #### `id` A unique identifier for this plugin (`string`, default: `'FileInput'`). #### `title` Configures the title / name shown in the UI, for instance, on Dashboard tabs (`string`, default: `'File Input'`). #### `target` DOM element, CSS selector, or plugin to place the audio into (`string` or `Element`, default: `null`). #### `pretty` When true, display a styled button that, when clicked, opens the file selector UI. When false, a plain old browser `` element is shown (`boolean`, default: `true`). #### `inputName` The `name` attribute for the `` element (`string`, default: `'files[]'`). #### `locale` ```js export default { strings: { // The same key is used for the same purpose by @uppy/robodog's `form()` API, but our // locale pack scripts can't access it in Robodog. If it is updated here, it should // also be updated there! chooseFiles: 'Choose files', }, }; ``` ## Custom file inpt If you don’t like the look/feel of the button rendered by `@uppy/file-input`, feel free to forgo the plugin and use your own custom button on a page, like so: ```html ``` Then add this JS to attach it to Uppy: ```js const uppy = new Uppy(/* ... */); const fileInput = document.querySelector('#my-file-input'); fileInput.addEventListener('change', (event) => { const files = Array.from(event.target.files); files.forEach((file) => { try { uppy.addFile({ source: 'file input', name: file.name, type: file.type, data: file, }); } catch (err) { if (err.isRestriction) { // handle restrictions console.log('Restriction error:', err); } else { // handle other errors console.error(err); } } }); }); // Clear the `` after the upload or when the file was removed // so the file can be uploaded again (see // https://github.com/transloadit/uppy/issues/2640#issuecomment-731034781). uppy.on('file-removed', () => { fileInput.value = null; }); uppy.on('complete', () => { fileInput.value = null; }); ```