1

Je m'attendrais à quelque chose comme ceci pour fonctionner mais les ListItem, BeforeProperties, AfterProperties sont tous null/empty. J'ai besoin du nom de fichier et du contenu du fichier.Comment obtenez-vous les détails de fichier dans un ItemEventReciever SharePoint dans l'événement ItemAdding?

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; 
     } 
    } 
} 

Je ne peux pas utiliser ItemAdded comme il est asynchrone et je dois être synchrone, je peux empêcher le téléchargement et afficher un message à l'utilisateur.

Toutes les suggestions seraient appréciées. Par exemple, est-il possible de surcharger Upload.aspx?

Répondre

2

Vous pouvez utiliser HttpContext pour récupérer HttpFileCollection qui doit contenir les fichiers téléchargés. Cela ne fonctionnera que pour les téléchargements de fichiers individuels via l'interface Web. Effectuer plusieurs téléchargements de fichiers ou enregistrer directement à partir d'Office ne crée pas de HttpContext. Essayez quelque chose comme ceci:

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

Cela n'a pas fonctionné pour moi. Pour une raison quelconque, la variable HttpContext.Current est null. – DomenicDatti

0

Notez le suffixe - "Ajouter". Ça va être nul car il n'a pas encore été ajouté. Essayez d'utiliser - "ajouté". EDIT: Je crois qu'il y a un objet "AfterProperties plutôt que des propriétés que vous pouvez attraper quelque part, je suis à la porte pour le moment, mais je suis sûr que vous pouvez faire un peu de google sur google pour trouver la méthode associée .

0

comme Janie a écrit cet événement est déclenché avant que l'insert, mais vous devriez être en mesure d'accéder aux BeforeProperties afin que vous n'avez pas l'utilisation de l'événement ItemAdded.

ce serait dans la plupart des cas à la fin de l'événement ItemAdding est généralement utilisé pour valider l'entrée

Happy coding

0

Il est possible de récupérer le nom de fichier en utilisant une propriété (il y en a quelques-unes que vous pouvez utiliser). SPItemEventProperties.BeforeUrl contient ceci.

Il n'est pas possible d'extraire le contenu du fichier car il n'est pas fourni par un membre de SPItemEventProperties. Le fichier n'a pas encore été écrit dans la base de données et n'existe que dans la mémoire du serveur auquel l'utilisateur est connecté. Par conséquent, malheureusement, les méthodes standard ne peuvent pas être utilisées.