1

このようなものが機能することを期待していますが、ListItem、BeforeProperties、AfterProperties はすべて null/空です。ファイル名とファイルの内容が必要です。

public class MyItemEventReceiver : SPItemEventReceiver {
    public MyItemEventReceiver() {}
    public override void ItemAdding(SPItemEventProperties properties) {
        SPListItem item = properties.ListItem;
        bool fail = item.File.Name.Equals("fail.txt");
        if (fail) {
            properties.ErrorMessage = "The file failed validation";
            properties.Cancel = true;
        }
    }
}

ItemAdded は非同期であり、同期する必要があるため使用できません。アップロードを妨げて、ユーザーにメッセージを表示する可能性があります。

任意の提案をいただければ幸いです。たとえば、Upload.aspx を上書きすることは可能ですか?

4

4 に答える 4

2

HttpContext を使用して、アップロードされたファイルを含む HttpFileCollection を取得できます。これは、Web UI を介した個々のファイルのアップロードに対してのみ機能します。複数のファイルをアップロードしたり、Office から直接保存したりしても、HttpContext は作成されません。次のようなことを試してください:

private HttpContext context;

public MyItemEventReceiver() {
    context = HttpContext.Current;
}

public override void ItemAdding(SPItemEventProperties properties) {
    HttpFileCollection collection = context.Request.Files;
    foreach (String name in collection.Keys) {
        if (collection[name].ContentLength > 0) {
            // Do what you need with collection[name].InputStream
        }
    }
}
于 2009-08-17T13:35:55.997 に答える
0

プロパティを使用してファイル名を取得することができます (使用できるものはいくつかあります)。SPItemEventProperties.BeforeUrlにはこれが含まれます。

ファイルの内容はSPItemEventPropertiesのどのメンバーからも提供されないため、取得することはできません。ファイルはまだデータベースに書き込まれておらず、ユーザーが接続しているサーバーのメモリにのみ存在します。したがって、残念ながら標準的な方法は使用できません。

于 2009-08-12T13:58:33.913 に答える
0

Janie が書いたように、このイベントは挿入の前にトリガーされますが、BeforeProperties にアクセスできるはずなので、ItemAdded イベントを使用する必要はありません。

ItemAdding イベントは一般的に入力の検証に使用されるため、ほとんどの場合、それは遅すぎます。

ハッピーコーディング

于 2009-07-24T22:17:30.720 に答える
0

接尾辞「adding」に注意してください。まだ追加されていないため、null になります。-「追加」を使用してみてください。

編集: どこかで取得できるプロパティ オブジェクトではなく、「AfterProperties」があると思います。

于 2009-07-24T21:56:58.470 に答える