Add the web picker to your HTML forms

Explore how to extract user files via the picker and seamlessly integrate them into a basic HTML form, enhancing overall user interaction..

The Regular Way

Usually, when getting files from users you can use a basic input element with the type attribute set to "file".

<form>
  <label for="fileupload">Select a file to upload</label>
  <input type="file" id="fileupload">
  <input type="submit" value="Submit">
</form>

This generally works when you have a backend waiting to process file uploads. In the best case, you upload to a dedicated object store and return a reference to the file, and in the worst case, you store the whole file on your server.

The Filestack picker can take files from both local and cloud sources and generate URLs for them. This eliminates the need for upload handling in our backend, and we can instead attach the returned Filestack URLs to our form.

How might this look?

Replace the file input

Let’s modify the original form to use a hidden input instead. Assume this field will become the URL of the newly uploaded file.

<form>
  <label for="fileupload">Select a file to upload</label>
  <input type="hidden" id="fileupload">
  <input type="submit" value="Submit">
</form>

We will also add a button to trigger the picker open.

<form>
  <label for="fileupload">Select a file to upload</label>
  <input type="hidden" id="fileupload">
  <button id="picker" type="button">Pick file</button>
  <input type="submit" value="Submit">
</form>

So far, so good. We just need to get the returned URL of the uploaded file and update our form field. To do this, we can do a little DOM manipulation in vanilla JS.

Here’s the full demo:

Now your regular HTML file input is no longer needed, and you can submit references to your Filestack assets instead. There are many picker options to customize what kinds of files are accepted, and some mirror the options to HTML file inputs (like the accept attribute).

Hopefully, this guide shows that, with a little knowledge of web technologies, you can integrate Filestack uploads into any form that expects user files.

Bonus: Add a thumbnail preview

<form>
  <label for="fileupload">Select a file to upload</label>
  <input type="hidden" id="fileupload">
  <button id="picker">Pick file</button>
  <div id="thumbnail-container"></div>
  <input type="submit" value="Submit">
</form>
// Same setup as before...but change this function

function updateForm (result) {
  const fileData = result.filesUploaded[0];
  fileInput.value = fileData.url;

  // If file is resizable image, resize and embed it as a thumbnail preview
  if (['jpeg', 'png'].indexOf(fileData.mimetype.split('/')[1]) !== -1) {
    const container = document.getElementById('thumbnail-container');
    const thumbnail = document.getElementById('thumbnail') || new Image();
    thumbnail.id = 'thumbnail';
    thumbnail.src = client.transform(fileData.handle, { 
      resize: { 
        width: 200 
      }
    });

    if (!container.contains(thumbnail)) {
      container.appendChild(thumbnail);
    }
  }
};