---
title: "Manage file storage for forms"
slug: "manage-file-storage-for-forms"
abstract: "Learn how to add new file storage and create a custom FileStorageProvider class"
---
# Manage file storage for forms

Sitecore Forms contains a file upload element that you can use to allow a visitor to attach a single file or multiple files to your web form. For example, a resume, an avatar, or a profile picture. This topic describes how to manage the storage of these uploaded files.

By default, all forms data is stored in the Experience Forms database. In the `Sitecore.ExperienceForms.config` file, you can view the default setting by checking the following connection string: `Sitecore.ExperienceForms.FileStorageConnectionStringName`.

<details>
<summary><h2>Add new file storage using a connection string</h2></summary>

For scalability reasons, you might want to separate the storage for general forms data coming from the form fields and the storage for files uploaded by visitors.

To connect Sitecore Forms file storage to a different database:

1. Open the `Sitecore.ExperienceForms.config` file and add a setting using the following connection string: `Sitecore.ExperienceForms.FileStorageConnectionStringName`

    For example:

    ```text
    <setting name="Sitecore.ExperienceForms.FileStorageConnectionStringName" value=fileStorage" />
    ```

2. Open the `ConnectionStrings.config` file and add the connection string that you just created. For example:

    ```text
    <add name="fileStorage" connectionString="Data Source=.;Initial Catalog=sc930xp0_FileStorage;User ID=formsuser;Password=sitecore" />
    ```

</details>

<details>
<summary><h2>Create a custom FileStorageProvider class</h2></summary>

You can develop a different `FileStorageProvider`class by implementing the `IFileStorageProvider` interface.

To create a custom `FileStorageProvider`:

1. Create your own `FileStorageProvider` class. To extend the `IFileStorageProvider`, you must add a reference to the `Sitecore.ExperienceForms.Data` assembly.

    ```csharp
    public interface IFileStorageProvider

        {

            Guid StoreFile(Stream file, string fileName);

            StoredFile GetFile(Guid fileId);

            void DeleteFiles(IEnumerable<Guid> fileIds);

            void CommitFiles(IEnumerable<Guid> fileIds);

            void Cleanup(TimeSpan timeSpan);

        }
    ```

    The following table describes the commands:

    - Command: Description
    - StoreFile: Stores a new file into the storage. Returns the GUID of the stored file.
    - GetFile: Retrieves the file information and file content in a StoredFile object. The StoredFile class contains the following:

    ```csharp
    public class StoredFile
        {
            public StoredFileInfo FileInfo { get; set; }
            public Stream File { get; set; }
    }
    ```

    - DeleteFIles: Deletes files from the storage.
    - CommitFIles: Commits the files inside the storage. Files that are committed are not removed during cleanup.
2. To register the customized file provider, open the `Sitecore.ExperienceForms.config` file and search for `Sitecore.ExperienceForms.Data.IFileStorageProvider, Sitecore.ExperienceForms`.
3. Replace the implementation type with your `FileStorageProvider` class name and assembly name.

    ```text
    <register serviceType="Sitecore.ExperienceForms.Data.IFileStorageProvider, Sitecore.ExperienceForms" implementationType="SItecore.ExperienceForms.Data.SqlServer.SqlFilestorageProvider, Sitecore.ExperienceForms.Data.SqlServer" lifetime="Transient" />
    ```

</details>

<details>
<summary><h2>Plan a cleanup task</h2></summary>

Sitecore Forms automatically stores uploaded files when a visitor navigates between form pages, even if the form is not submitted. How long an uncommitted file is stored is determined by the `FileGracePeriod` setting (the default is 4 hours).

To define how long an uncommitted file is stored, change the FileGracePeriod setting:

- Open the `Sitecore.ExperienceForms.config` file and go `Sitecore.ExperienceForms.FileGracePeriod`.

    ```text
    <setting name="Sitecore.ExperienceForms.FileGracePeriod" value="`00:04`:`00:00`" />
    ```

The cleanup mechanism cleans uncommitted files. By default, the cleanup task runs once every 24 hours.

To control commands and schedules for cleaning the Forms database:

- In the Master database, go to *sitecore/System/Tasks/*

    ![File storage clean up task for Sitecore Forms](https://doc.sitecore.com/api/markdown-image/xp/en/developers/104/sitecore-experience-manager/images/FORMS-storage.png)

    The `FileStorageCleanup` command includes the following fields:

    | Field | Description |
    | --- | --- |
    | Type | The full name and the assembly name of your cleanup class. For example: `Sitecore.ExperienceForms.Tasks.FileStorageCleanup,Sitecore.ExperienceForms` |
    | Method | The name of the method. For example: `Execute` |

    The `TaskSchedule` item defines when a task runs. The `FileStorageCleanup` schedule item defines how a task runs and includes the following fields:

    | Field | Description |
    | --- | --- |
    | Command | The name of the command. For example: `Commands/Forms/FileStorageCleanup`. |
    | Items | Specify the list of items to be passed to the command method execution. |
    | Schedule | Specify the schedule of the task. By default, the cleanup runs every 24 hours:` 20190101\|99990101\|127\|`24:00`:00` |
    | Last run | The last run time of the task. By default, Sitecore automatically updates the **Last Run** field after the cleanup task is complete. |
    | Async | Select to run the task asynchronously. |
    | Auto remove | Select to automatically remove the scheduled item after invoking the task. |

</details>