ItemAdding 이벤트에서 SharePoint itemEventReciever에서 파일 세부 사항을 어떻게 얻습니까?
-
19-09-2019 - |
문제
나는 이와 같은 것이 효과가있을 것으로 기대하지만, 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. 파일은 아직 데이터베이스에 기록되지 않았으며 사용자가 연결하는 서버의 메모리에만 존재합니다. 따라서 불행히도 표준 방법을 사용할 수 없습니다.