Pergunta

Eu esperaria algo assim para o trabalho, mas o ListItem, BeforeProperties, AfterProperties são todos nulos / esvaziar. Preciso do nome do arquivo e arquivo de conteúdo.

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

Eu não pode usar ItemAdded como é assíncrona e eu preciso ser síncrono, eu pode impedir o upload e exibir uma mensagem para o usuário.

Todas as sugestões serão apreciadas. Por exemplo, é possível substituir o Upload.aspx?

Foi útil?

Solução

Você pode usar o HttpContext para recuperar o HttpFileCollection que deve conter os arquivos enviados. Isso só vai funcionar para o upload de arquivos individuais através da interface web. Fazendo carregar múltiplos arquivos, ou salvar diretamente do Office não criará um HttpContext. Tente algo parecido com isto:

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

Outras dicas

Observe o sufixo - "acrescentar". Vai ser nulo porque não foi adicionado ainda. Tente usar - "acrescentado"

EDIT: Eu acredito que há um "AfterProperties em vez de objeto de propriedades que você pode pegar em algum lugar, eu estou fora da porta no momento, mas eu tenho certeza que você pode fazer algumas escavações no Google para encontrar o método relacionado ser jogado.

Como Janie escreveu este evento é acionado antes da inserção, mas você deve ser capaz de acessar os BeforeProperties para que você não tem o uso do evento ItemAdded.

Isso na maioria dos casos, ser tarde como o evento ItemAdding é comumente usado para validar a entrada.

Happy codificação

É possível recuperar o nome do arquivo usando uma propriedade (há alguns que você pode usar). SPItemEventProperties.BeforeUrl contém esse.

Não é possível recuperar o conteúdo do arquivo como este não é fornecido por qualquer membro da SPItemEventProperties . O arquivo não foi escrito para o banco de dados ainda, e só existe na memória do servidor o usuário está conectado. Portanto métodos infelizmente padrão não pode ser usado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top