Frage

Ich würde erwarten, so etwas zu arbeiten, aber die ListItem, BeforeProperties, AfterProperties sind alle null / leer. Ich brauche die Dateinamen und Dateiinhalt.

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

Ich kann nicht ItemAdded verwenden, da es asynchron ist, und ich muß synchron sein, ich kann das Hochladen verhindern und eine Nachricht an den Benutzer angezeigt werden.

Alle Vorschläge würden geschätzt. Zum Beispiel ist es möglich, die Upload.aspx außer Kraft zu setzen?

War es hilfreich?

Lösung

Sie können die Httpcontext verwenden, um die HttpFileCollection abzurufen, die die hochgeladenen Dateien enthalten soll. Dies wird nur für einzelne Datei-Uploads über die Web-Benutzeroberfläche arbeiten. Upload von mehreren Dateien zu tun, oder direkt aus Office-Speichern wird keine Httpcontext erstellen. Probieren Sie etwas wie folgt aus:

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

Andere Tipps

Beachten Sie das Suffix - "Hinzufügen" Es wird null sein, weil es noch nicht gegeben. Versuchen Sie es mit - "hinzugefügt"

EDIT: Ich glaube, es gibt ein „AfterProperties anstatt Eigenschaften Objekt, das Sie irgendwo greifen kann, ich im Moment aus der Tür bin, aber ich bin sicher, dass Sie einige graben auf Google tun können, die ähnliche Methode zu finden, geworfen zu werden.

Wie Janie dieses Ereignis geschrieben wird vor dem Einsatz ausgelöst, aber Sie sollten die BeforeProperties zugreifen können, so dass Sie nicht die Verwendung der Veranstaltung ItemAdded haben.

Das wäre in den meisten Fällen zu spät als das ItemAdding Ereignis häufig die Eingabe bestätigen verwendet wird.

Happy Codierung

Es ist möglich, den Dateinamen abzurufen, indem eine Eigenschaft mit (es gibt ein paar Sie verwenden können). SPItemEventProperties.BeforeUrl enthält diese.

Es ist nicht möglich, den Inhalt der Datei abgerufen werden, da dies nicht von einem Mitglied von SPItemEventProperties . Die Datei wird in die Datenbank bisher noch nicht geschrieben und existiert nur im Speicher des Servers der Benutzer verbunden ist. Daher leiden Standardverfahren nicht verwendet werden können.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top