ItemAdding 이벤트에서 SharePoint itemEventReciever에서 파일 세부 사항을 어떻게 얻습니까?

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

문제

나는 이와 같은 것이 효과가있을 것으로 기대하지만, Properties 이전의 ListItem은 모두 널/비어 있습니다. 파일 이름과 파일 내용이 필요합니다.

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

비동기 적이므로 ItemAdded를 사용할 수 없으며 동기식이어야합니다. 업로드를 방지하고 사용자에게 메시지를 표시 할 수 있습니다.

모든 제안은 감사 할 것입니다. 예를 들어, upload.aspx를 무시할 수 있습니까?

도움이 되었습니까?

해결책

httpcontext를 사용하여 업로드 된 파일이 포함되어야하는 httpfilecollection을 검색 할 수 있습니다. 이것은 웹 UI를 통해 개별 파일 업로드에 대해서만 작동합니다. 여러 파일 업로드를하거나 사무실에서 직접 저장하면 HTTPContext가 발생하지 않습니다. 다음과 같은 것을 시도하십시오.

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

다른 팁

접미사 -"추가." 아직 추가되지 않았기 때문에 Null이 될 것입니다. "추가"를 사용해보십시오.

편집 : 나는 당신이 어딘가에 잡을 수있는 속성 대상이 아닌 후속 분열이 있다고 생각합니다. 지금은 문 밖으로 나가지만, Google을 파고 관련된 방법이 던져지는 것을 찾을 수 있다고 확신합니다.

Janie 가이 이벤트가 삽입되기 전에 트리거되었지만 PreverProperties에 액세스 할 수 있으므로 ItemAdded 이벤트를 사용하지 않아야합니다.

ItemAdding 이벤트가 일반적으로 입력을 검증하는 데 사용되므로 대부분의 경우 늦어집니다.

행복한 코딩

속성을 사용하여 파일 이름을 검색 할 수 있습니다 (사용할 수있는 몇 가지가 있습니다). SpitemeventProperties.beforeurl 이것을 포함합니다.

파일의 내용을 검색 할 수 없습니다. SpitemeventProperties. 파일은 아직 데이터베이스에 기록되지 않았으며 사용자가 연결하는 서버의 메모리에만 존재합니다. 따라서 불행히도 표준 방법을 사용할 수 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top