Comment les détails du fichier que vous obtenez dans un SharePoint ItemEventReciever dans le ItemAdding événement?

StackOverflow https://stackoverflow.com/questions/1180364

Question

J'attends quelque chose comme cela fonctionne, mais les ListItem, BeforeProperties, AfterProperties sont tous nuls / vide. J'ai besoin du nom de fichier et le contenu fichier.

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és. Par exemple, il est possible de passer outre le Upload.aspx?

Était-ce utile?

La solution

Vous pouvez utiliser le HttpContext pour récupérer le HttpFileCollection qui doit contenir les fichiers téléchargés. Cela ne fonctionnera que pour les téléchargements de fichiers individuels par le biais de l'interface utilisateur Web. Faire plusieurs téléchargements de fichiers, ou d'enregistrer directement à partir d'Office ne crée pas un 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
        }
    }
}

Autres conseils

Remarquez le suffixe - "ajoutant." Il va être nulle parce qu'elle n'a pas été ajouté encore. Essayez d'utiliser - "ajouté"

EDIT: Je crois qu'il ya un « AfterProperties objet plutôt que les propriétés que vous pouvez saisir quelque part, je suis à la porte en ce moment, mais je suis sûr que vous pouvez faire quelques recherches sur Google pour trouver la méthode associée se levée.

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 couramment utilisé pour valider l'entrée.

Happy codage

Il est possible de récupérer le nom de fichier à l'aide d'une propriété (il y a quelques vous pouvez utiliser). SPItemEventProperties.BeforeUrl contient ce sujet.

Il est impossible de récupérer le contenu du fichier que ce ne sont pas fournies par un membre de SPItemEventProperties . Le fichier n'a pas été écrit à la base de données encore et existe seulement dans la mémoire du serveur auquel l'utilisateur est connecté. Par conséquent, ne peuvent pas être utilisées des méthodes standards, malheureusement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top