¿Cómo se obtiene detalles de los archivos en un servidor SharePoint ItemEventReciever en el ItemAdding Evento?

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

Pregunta

Me esperaba algo así que esto funcione, pero los ListItem, BeforeProperties, AfterProperties son todos nulos / vacío. Necesito el nombre de archivo y archivo de contenido.

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

No puedo utilizar ItemAdded ya que es asíncrona y necesito ser sincrónica, puedo evitar que la carga y mostrar un mensaje al usuario.

se agradecería cualquier sugerencia. Por ejemplo, es posible anular el Upload.aspx?

¿Fue útil?

Solución

Puede utilizar el HttpContext para recuperar el HttpFileCollection que debe contener los archivos subidos. Esto sólo funcionará para la carga de archivos individuales a través de la interfaz web. Haciendo multiple de ficheros, o guardar directamente desde Office no creará un HttpContext. Intentar algo como esto:

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

Otros consejos

Tenga en cuenta el sufijo - "añadir". Va a ser nula, ya que no se ha agregado aún. Trate de usar - "agregado"

EDIT: Creo que hay un "AfterProperties en lugar de objeto de propiedades se puede agarrar en algún lugar, estoy fuera de la puerta en el momento, pero estoy seguro de que puede hacer algo de investigación en Google para encontrar el método relacionado que les metan.

Como escribió Janie este evento se dispara antes de la inserción, pero usted debe ser capaz de acceder a los BeforeProperties por lo que no tiene el uso del evento ItemAdded.

Eso sería en la mayoría de los casos a ser tarde como en el caso ItemAdding se utiliza comúnmente para validar la entrada.

feliz de codificación

Es posible recuperar el nombre del archivo mediante el uso de una propiedad (hay unos pocos que puede utilizar). SPItemEventProperties.BeforeUrl contiene esto.

No es posible recuperar el contenido del archivo, ya que no es proporcionado por cualquier miembro de SPItemEventProperties . El archivo no se ha escrito en la base de datos todavía y sólo existe en la memoria del servidor que el usuario está conectado. Por lo tanto los métodos desgracia estándar no pueden ser utilizados.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top