フォームのファイル ストレージを管理する

Current version: 10.1

Sitecore Forms には、訪問者が 1 つのファイルまたは複数のファイルを Web フォームに添付できるようにするためのファイル アップロード要素が含まれています。たとえば、履歴書、アバター、プロフィール写真などです。このトピックでは、このようにしてアップロードされたファイルのストレージを管理する方法について説明します。

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

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

スケーラビリティ上の理由から、フォーム フィールドからの一般的なフォーム データ用のストレージと、訪問者によってアップロードされたファイル用のストレージを分離することをお勧めします。

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

  1. Sitecore.ExperienceForms.config ファイルを開き、Sitecore.ExperienceForms.FileStorageConnectionStringName 接続文字列を使用して設定を追加します。

    例:

    RequestResponse
    <setting name="Sitecore.ExperienceForms.FileStorageConnectionStringName" value=fileStorage" />
  2. ConnectionStrings.config ファイルを開き、作成した接続文字列を追加します。例:

    RequestResponse
    <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 アセンブリに参照を追加する必要があります。

    RequestResponse
    
    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 クラスには以下が含まれます。

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

    DeleteFIles

    ストレージからファイルを削除します。

    CommitFIles

    ストレージ内のファイルをコミットします。コミットされたファイルは、クリーンアップ時に削除されません。

  2. カスタマイズされたファイル プロバイダーを登録するには、Sitecore.ExperienceForms.config ファイルを開き、Sitecore.ExperienceForms.Data.IFileStorageProvider, Sitecore.ExperienceForms を検索します。

  3. 実装タイプを FileStorageProvider のクラス名とアセンブリ名に置き換えます。

    RequestResponse
    <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 に移動します。

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

クリーンアップ メカニズムが、コミットされていないファイルをクリーンアップします。デフォルトでは、クリーンアップ タスクは 24 時間に 1 回実行されます。

Forms database をクリーニングするためのコマンドとスケジュールを制御するには:

  • Master database で、sitecore/System/Tasks/ に移動します。

    Sitecore Forms のファイル ストレージ クリーンアップ タスク

    FileStorageCleanup コマンドには以下のフィールドが含まれます。

    フィールド

    説明

    タイプ

    クリーンアップ クラスの完全な名前とアセンブリ名。例: Sitecore.ExperienceForms.Tasks.FileStorageCleanup,Sitecore.ExperienceForms

    メソッド

    メソッドの名前。例: Execute

    TaskSchedule アイテムは、タスクがいつ実行されるかを定義します。FileStorageCleanup スケジュール アイテムは、タスクの実行方法を定義し、以下のフィールドを含みます。

    フィールド

    説明

    コマンド

    コマンドの名前。例: Commands/Forms/FileStorageCleanup

    アイテム

    メソッド実行コマンドに渡すアイテムのリストを指定します。

    スケジュール

    タスクのスケジュールを指定します。デフォルトでは、クリーンアップは 24 時間ごとに実行されます。例: 20190101|99990101|127|24:00:00

    最後に実行した日時

    タスクの前回の実行時間。デフォルトでは、Sitecore は、クリーンアップ タスクの完了後、[前回実行] フィールドを自動的に更新します。

    非同期

    タスクを非同期で実行する場合に選択します。

    自動削除

    タスクを呼び出した後、スケジュールされたアイテムを自動的に削除する場合に選択します。

Do you have some feedback for us?

If you have suggestions for improving this article,