我希望这样的事情工作,但列表项,BeforeProperties,AfterProperties是所有空/空。我需要的文件名称和文件的内容。

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,因为它是异步的我需要同步,我可以防止上传和显示信息的用户。

任何建议,将不胜感激。例如,它可以复盖上传。aspx?

有帮助吗?

解决方案

您可以使用的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
        }
    }
}

其他提示

注意后缀 - “添加”。这是怎么回事,因为它没有添加为空。尝试使用 - “加入”

编辑:我相信有一个“AfterProperties而不是性能对象,你可以抓住的地方,我出去的时候,门,但我敢肯定,你可以做一些谷歌挖找到相关的方法越来越抛出。

由于珍妮写道插入之前触发此事件,但你应该能够访问BeforeProperties所以你没有使用ItemAdded事件。

这将在大多数情况下是迟至ItemAdding事件通常用于验证输入。

快乐编码

它可以检索的文件通过使用财产(有几个可以使用)。 SPItemEventProperties.BeforeUrl 包含这一点。

这是不可能检索文件的内容,因为这是不提供的任何成员 SPItemEventProperties.该文件还没有被写入数据库还存在,只有在存在服务器的用户连接。因此,不幸的是标准方法不能使用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top