Uploadwatcher がアップロード中に一部のファイルをランダムにスキップすることがある


解説

Sitecoreには、ファイルをアイテムとして自動的にアップロードする特別な機能があります。

デフォルトでは、ファイルは/uploadフォルダに配置する必要がありますが、web.configファイルの以下の設定を使用して、場所を変更することができます:

<sc.variable name="mediaFolder" value="/upload"/>

この機能を使用する際は、Sitecoreが実行されている必要があります。

しかし、50個以上のファイルをアップロードしようとすると、一部のファイルがアップロードされないことがあります。

これは、SitecoreがSystem.IO.FileSystemWatcherオブジェクトを使用して新しいファイルの出現を監視しているために発生します。一度に多くのファイルが追加されると、FileSystemWatcherのinternalBufferが満杯になり、ファイルをスキップするようになるためです。備考は以下の記事をご覧ください:https://docs.microsoft.com/ja-jp/dotnet/api/system.io.filesystemwatcher?redirectedfrom=MSDN&view=net-6.0

解決策

回避策として、添付のSitecore.Support.323775.dll ファイルを使用してください。

  1. 設定ファイル内で以下の文字列が出現するたびに:
    <add type="Sitecore.Resources.Media.UploadWatcher, Sitecore.Kernel" name="SitecoreUploadWatcher"/> 
    その前に、以下の文字列を設定パッチで追加します:
    <add type="Sitecore.Support.UploadWatcher,Sitecore.Support.323775" name="SitecoreUploadWatcher"/> 
  2. 以下の行をコメントアウトします:
    <add type="Sitecore.Resources.Media.UploadWatcher, Sitecore.Kernel" name="SitecoreUploadWatcher"/>
  3. Sitecore.Support.323775.dll ファイルを Web サイトの /bin フォルダーに配置します。
  4. web.config ファイルで、<settings> セクションの下に次の文字列を追加します:
    <setting name="FileSystemWatcherBufferSize" value="4096000"/>

    この値は5000個のファイルに対応できますが、より長い名前のファイルを確実にアップロードできるよう、さらに値を増やすことも可能です。 たとえば、フル ファイル パスに平均で100個のシンボルが含まれている場合、1ファイルあたり200バイトが必要になります。よって、32000個のファイルには6400000バイト(6250 kb)が必要です。したがって、この場合の設定値は次のようになります:

    <setting name="FileSystemWatcherBufferSize" value="6400000"/>‌