2009-07-24 72 views
1

我希望這樣的工作,但ListItem,BeforeProperties,AfterProperties都是空/空。 我需要文件名和文件內容。如何在ItemAdding事件中的SharePoint ItemEventReciever中獲取文件詳細信息?

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?

回答

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 
     } 
    } 
} 
+0

這並不適用於我。無論出於何種原因,HttpContext.Current變量都是null。 – DomenicDatti 2014-07-23 12:56:47

0

注意後綴 - 「添加」。這將是空的,因爲它尚未添加。嘗試使用 - 「添加」。

編輯:我相信有一個「AfterProperties,而不是屬性對象,你可以抓住某個地方,我現在出門,但我相信你可以做一些挖掘谷歌找到相關的方法得到拋出。

0

由於珍妮寫道插入之前觸發此事件,但你應該能夠訪問BeforeProperties所以你沒有使用ItemAdded事件。

這將在大多數情況下是晚ItemAdding事件通常用於驗證輸入。

快樂編碼

0

可以通過使用屬性來檢索文件名(可以使用一些屬性)。 SPItemEventProperties.BeforeUrl包含此內容。

無法檢索文件的內容,因爲SPItemEventProperties的任何成員都不提供此文件的內容。該文件尚未寫入數據庫,並且只存在於用戶連接到的服務器的內存中。因此不幸的是標準方法不能使用。

相關問題