你怎么得到的文件详细信息在SharePoint ItemEventReciever在ItemAdding事件?
-
19-09-2019 - |
题
我希望这样的事情工作,但列表项,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.该文件还没有被写入数据库还存在,只有在存在服务器的用户连接。因此,不幸的是标准方法不能使用。
不隶属于 StackOverflow