Domanda

Mi aspetterei che qualcosa del genere funzioni, ma ListItem, BeforeProperties, AfterProperties sono tutti null/vuoti.Ho bisogno del nome del file e del contenuto del file.

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

Non posso utilizzare ItemAdded poiché è asincrono e devo essere sincrono, potrei impedire il caricamento e visualizzare un messaggio all'utente.

Tutti i suggerimenti sarebbero apprezzati.Ad esempio, è possibile sovrascrivere Upload.aspx?

È stato utile?

Soluzione

È possibile utilizzare il HttpContext per recuperare il HttpFileCollection che dovrebbe contenere i file caricati. Questo funziona solo per i singoli caricamenti di file attraverso l'interfaccia utente web. Facendo caricamento di file multipli, o salvare direttamente da Office non creerà un HttpContext. Provare qualcosa di simile:

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

Altri suggerimenti

Notare il suffisso -"Aggiunta." Sarà nullo perché non è stato ancora aggiunto.Prova a utilizzare -"aggiunto".

MODIFICARE:Credo che ci sia un "AfterProperties piuttosto che un oggetto proprietà che puoi prendere da qualche parte, al momento sono fuori dalla porta, ma sono sicuro che puoi fare qualche ricerca su Google per trovare il metodo correlato che viene lanciato.

Come ha scritto Janie questo evento viene attivato prima l'inserto, ma si dovrebbe essere in grado di accedere ai BeforeProperties in modo da non avere l'uso della manifestazione ItemAdded.

Questo sarebbe nella maggior parte dei casi può essere troppo tardi come l'evento ItemAdding è comunemente utilizzato per convalidare l'input.

Happy codifica

E 'possibile recuperare il nome del file utilizzando una proprietà (ci sono pochi è possibile utilizzare). SPItemEventProperties.BeforeUrl contiene questo.

Non è possibile recuperare il contenuto del file come ciò non è previsto da alcun membro del SPItemEventProperties . Il file non è stato scritto nel database ancora ed esiste solo nella memoria del server che l'utente è connesso. Pertanto metodi purtroppo standard non possono essere utilizzati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top