4

こんにちは、 WFFM (sitecore)で「フォームのような友人に伝える」を作成しようとしていますが、フォームにファイルを添付する機能も追加しています。これは正常に機能しています。今、ユーザーが1 MBを超える大きなファイルを添付することを禁止したいので、新しいクラスを作成します

public class LimiteFileSize 
{
  public void Process(FormUploadFileArgs args)
  {
    int size = 1049000;

    if (args.File.Data.Length > size)
    {
      Sitecore.Diagnostics.Log.Error(string.Format("User {0} tried to upload a file larger than 10 Mb. The file name is {1}",
                                     Sitecore.Context.User.Name,
                                     args.File.FileName), this);
      args.AbortPipeline();
    }
  }
}

それをforms.configに登録します

<formUploadFile>
  <processor type="Sitecore.Form.Core.Pipelines.FormUploadFile.ResolveFolder, Sitecore.Forms.Core"/>
  <processor type="Sitecore.Form.Core.Pipelines.FormUploadFile.Save, Sitecore.Forms.Core"/>
  <processor type="scwffm2.Helper.LimiteFileSize, scwffm2.Helper"/>  
</formUploadFile>

今、コメントしたり削除したりしないと(これは WFFM のデフォルトの保存アクションです) `

<processor type="Sitecore.Form.Core.Pipelines.FormUploadFile.Save, Sitecore.Forms.Core"/>

` 大きなファイルはデフォルトのアクションを使用してアップロードされ、上記の行がコメント化されている場合、データベースにファイルが大きくても小さくても保存されません。問題は、LimiteFileSize の処理 が正常に機能していることですが、ファイル サイズが 1 MB 未満の場合はファイルを保存しないだけで、ファイル サイズをチェックすることです。ファイル サイズが 1 MB 未満の場合は、else 条件を使用する必要があります。??

4

2 に答える 2

2

プロセッサは順番に実行されるため、Sitecore のプロセッサの上にプロセッサを配置する必要があると思います。あなたの場合、次のようになります。

<formUploadFile>
    <processor type="scwffm2.Helper.LimiteFileSize, scwffm2.Helper"/>  
    <processor type="Sitecore.Form.Core.Pipelines.FormUploadFile.ResolveFolder, Sitecore.Forms.Core"/>
    <processor type="Sitecore.Form.Core.Pipelines.FormUploadFile.Save, Sitecore.Forms.Core"/>
</formUploadFile>

別のオプションは、jQuery を使用してファイルサイズをチェックし、最初からファイルをアップロードすることさえできないことを確認することです。

$.validator.addMethod('filesize', function(value, element, param) {
    // param = size (en bytes) 
    // element = element to validate (<input>)
    // value = value of the element (file name)
    return this.optional(element) || (element.files[0].size <= param) 
});

$('#inputid').validate({
    rules: { input: { required: true, filesize: 1048576  }},
    messages: { input: "File must be less than 1MB" }
});

このコードはまだテストしていないので、微調整が必​​要かもしれません。

于 2013-11-11T11:11:10.703 に答える