كيف تحصل على تفاصيل الملفات في SharePoint Itemeventreciever في حدث ItemAdding؟

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

سؤال

أتوقع أن يعمل شيء من هذا القبيل ولكن القوائم المعقدة، بقيادته، حتى الآن غير فارغة / فارغة. أحتاج إلى اسم الملف ومحتوى الملفات.

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

لا أستطيع استخدام IDEDDED كما هو غير متزامن وأحتاج إلى أن أكون متزامنا، فقد منع تحميل وإظهار رسالة إلى المستخدم.

سيكون موضع تقدير أي اقتراحات. على سبيل المثال، هل من الممكن تجاوز UPLOAD.ASPX؟

هل كانت مفيدة؟

المحلول

يمكنك استخدام HttpContext لاسترداد جهاز HttpFilecollection الذي يجب أن يحتوي على الملفات التي تم تحميلها. سيعمل هذا فقط على تحميل الملفات الفردية من خلال Web UI. القيام برامج تحميل ملفات متعددة، أو توفير مباشرة من Office لن يقوم بإنشاء 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
        }
    }
}

نصائح أخرى

لاحظ لاحقة - "إضافة". سيكون فارغا لأنه لم تتم إضافته بعد. حاول استخدام - "أضاف".

تحرير: أعتقد أن هناك "ما بعد البيع بدلا من الكائنات الخصائص التي يمكنك الاستيلاء عليها في مكان ما، فأنا خارج الباب في الوقت الحالي، لكنني متأكد من أنه يمكنك القيام ببعض الحفر على Google للعثور على الطريقة ذات الصلة التي يتم طرحها.

نظرا لأن Janie كتب هذا الحدث يتم تشغيله قبل الإدراج، ولكن يجب أن تكون قادرا على الوصول إلى المعاد مباشرة حتى لا يكون لديك الحدث المستخدمة.

من شأنها أن تكون في معظم الحالات متأخرة حيث يتم استخدام حدث ItemAdding عادة للتحقق من صحة المدخلات.

رموز سعيد

من الممكن استرداد اسم الملف باستخدام خاصية (هناك عدد قليل يمكنك استخدامه). Spitemeventproperties.beforeurl. يحتوي على هذا.

لا يمكن استرداد محتويات الملف لأن هذا لا يوفره أي عضو في Spitemeventproperties.. وبعد لم يتم كتابة الملف إلى قاعدة البيانات حتى الآن ويقود فقط في ذاكرة الخادم متصل المستخدم به. لذلك لا يمكن استخدام طرق قياسية للأسف.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top