---
title: "フォームのファイル保存管理"
slug: "manage-file-storage-for-forms"
abstract: "新しいファイルストレージの追加方法やカスタムFileStorageProviderクラスの作成方法を学びましょう"
---
# フォームのファイル保存管理

Sitecoreフォームには、訪問者がウェブフォームに1つまたは複数のファイルを添付できるファイルアップロード要素が含まれています。例えば、履歴書、アバター、プロフィール写真などです。このトピックでは、これらのアップロードファイルの保存管理方法について説明します。

デフォルトでは、すべてのフォームデータはExperience Formsデータベースに保存されます。 Sitecore.ExperienceForms.configファイルでは、以下の接続文字列を確認することでデフォルト設定を確認できます: Sitecore.ExperienceForms.FileStorageConnectionStringName。

## 接続文字列を使って新しいファイルストレージを追加する

スケーラビリティの観点から、フォームフィールドから来る一般的なフォームデータのストレージと、訪問者がアップロードしたファイルのストレージを分けたいかもしれません。

Sitecore Formsのファイルストレージを別のデータベースに接続するには:

1.  Sitecore.ExperienceForms.configファイルを開いて、以下の接続文字列を使って設定を追加します:Sitecore.ExperienceForms.FileStorageConnectionStringName
    
    例えば:
    
    <setting name="Sitecore.ExperienceForms.FileStorageConnectionStringName" value=fileStorage" />
    
2.  ConnectionStrings.configファイルを開き、作成した接続文字列を追加します。例えば:
    
    <add name="fileStorage" connectionString="Data Source=.;Initial Catalog=sc930xp0\_FileStorage;User ID=formsuser;Password=sitecore" />
## カスタムFileStorageProviderクラスを作成する

IFileStorageProviderインターフェースを実装することで、別のFileStorageProviderクラスを開発できます。

カスタムFileStorageProviderを作成するには:

1.  自分だけのFileStorageProviderクラスを作成します。 IFileStorageProviderを拡張するには、Sitecore.ExperienceForms.Dataアセンブリへの参照を追加する必要があります。
    
    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);
    
        }
    
    以下の表はコマンドについて説明します:
    
    -   コマンド:説明
    -   StoreFile:新しいファイルをストレージに保存します。保存ファイルのGUIDを返します。
    -   GetFile:StoredFileオブジェクト内のファイル情報とファイル内容を取得します。StoredFileクラスには以下が含まれます:
    
    public class StoredFile
     {
     public StoredFileInfo FileInfo { get; set; }
     public Stream File { get; set; }
    }
    
    -   ファイル削除:ストレージからファイルを削除します。
    -   コミットファイル:ストレージ内のファイルをコミットします。コミットされたファイルはクリーンアップ時に削除されません。
2.  カスタマイズされたファイルプロバイダーを登録するには、Sitecore.ExperienceForms.configファイルを開き、Sitecore.ExperienceForms.Data.IFileStorageProvider, Sitecore.ExperienceFormsを検索してください。
    
3.  実装タイプをFileStorageProviderクラス名とアセンブリ名に置き換えます。
    
    <register serviceType="Sitecore.ExperienceForms.Data.IFileStorageProvider, Sitecore.ExperienceForms" implementationType="SItecore.ExperienceForms.Data.SqlServer.SqlFilestorageProvider, Sitecore.ExperienceForms.Data.SqlServer" lifetime="Transient" />

## 清掃作業を計画しましょう

Sitecore Formsは、訪問者がフォームページ間を移動する際に、フォームが提出されていなくても自動的にアップロードされたファイルを保存します。未コミットファイルの保存期間はFileGracePeriod設定によって決まります(デフォルトは4時間です)。

未コミットファイルの保存期間を定義するには、FileGracePeriodの設定を変更してください:

-   Sitecore.ExperienceForms.configファイルを開いてSitecore.ExperienceForms.FileGracePeriod。
    
    <setting name="Sitecore.ExperienceForms.FileGracePeriod" value="\`00:04\`:\`00:00\`" />
    

クリーンアップ機構は未コミットファイルをクリーンアップします。デフォルトでは、クリーンアップ作業は24時間ごとに1回実行されます。

フォームデータベースのクリーニングのためのコマンドやスケジュールを制御するには:

-   マスターデータベースでは、*sitecore/System/Tasks/*
    
    ![File storage clean up task for Sitecore Forms](https://doc.sitecore.com/api/markdown-image/xp/ja/developers/103/sitecore-experience-manager/images/FORMS-storage.png)
    
    FileStorageCleanupコマンドには以下のフィールドが含まれます:
    
    フィールド
    
    概要
    
    種類
    
    クリーンアップクラスのフルネームとアセンブリ名です。例えば: Sitecore.ExperienceForms.Tasks.FileStorageCleanup,Sitecore.ExperienceForms
    
    方法
    
    メソッドの名前です。例えば: Execute
    
    TaskSchedule項目はタスクの実行時刻を定義します。FileStorageCleanupスケジュール項目はタスクの実行方法を定義し、以下のフィールドを含みます。
    
    フィールド
    
    概要
    
    指揮
    
    コマンドの名前。例えば: Commands/Forms/FileStorageCleanup。
    
    アイテム
    
    コマンドメソッド実行に渡すアイテムのリストを指定します。
    
    スケジュール
    
    タスクのスケジュールを指定してください。デフォルトでは、クリーンアップは24時間ごとに行われます: 20190101|99990101|127|24:00:00
    
    最後の運行
    
    タスクの最終実行時間です。デフォルトでは、クリーンアップタスクが完了するとSitecoreは「 **最後の実行** 」フィールドを自動で更新します。
    
    非同期
    
    タスクを非同期実行に選択します。
    
    自動除去
    
    タスクを呼び出した後にスケジュールされた項目を自動的に削除するオプションを選択してください。