سؤال

لقد البرمجية التالية لتحميل الملف:

        FileInfo fileInfo = new FileInfo(filePath);

        context.Response.Clear();
        context.Response.ContentType = "application/octet-stream";
        context.Response.AddHeader("Content-Disposition", "attachment; filename=" + System.IO.Path.GetFileName(filePath));
        context.Response.AddHeader("Content-Length", fileInfo.Length.ToString());
        context.Response.WriteFile(filePath);
        context.Response.End();

عند تشغيلها على بلدي المحلية IIS6 أنه يعمل بشكل جيد.متصفح الإنترنت (اختبار على IE8, Firefox 3.5.2, Opera 10) يظهر الملف طول قبل البدء في تحميل الملف.

عند تشغيل هذه التعليمات البرمجية عن بعد IIS7 الويب, المتصفح لا يظهر الملف على طول.الملف هو معروف.

لماذا لا تحصل على طول الملف عند تشغيل هذه التعليمة البرمجية تحت IIS7?

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

المحلول

استخدام عازف الكمان للتحقق من ما هو في الواقع إرسالها.تخميني هو أنك تحصل على الترميز المقسم نتيجة التخزين المؤقت يتم تعيين إلى false في IIS7 الخادم.

راجع للشغل, انخفاض الاستجابة.إنهاء المكالمة تماما الشيء المؤلم أن تفعل و هو لا لزوم لها (لهذه المسألة إذن هي دعوة واضحة).

تحرير

بالمعنى الدقيق للكلمة عندما تدفق المحتوى مع الترميز المقسم (وهو أمر مرغوب فيه في السيناريو الخاص بك) على رأس طول محتوى لا يجب أن تكون موجودة (انظر RFC2616 القسم 4.4.) يبدو لي أن IIS7 تأخذ على عاتقها فرض هذا.في الواقع لقد كان كلاسيكي-ASP السيناريو الذي IIS7 يلقي خطأ عندما COM رمز يحاول إضافة رأس طول محتوى عندما التخزين المؤقت هو خارج.

هذا هو مزعج حقا لأنه على الرغم مما اللجنة في أبراج العاج مثل هذا رأس إعطاء المستخدم النهائي قطعة مفيدة جدا من المعلومات.

نصائح أخرى

وشكرا لهذا المنصب .... حصلت عليه العمل من أجل IE مع السطر الأول.

public void WriteCSV(string strData) {
   //Required for IIs7 WS2008R2 fix
   Response.ClearHeaders();
   Response.Clear();


   Response.Buffer = true; 
   Response.ContentType = "application/csv";
   Response.AddHeader("Content-Disposition", "attachment;filename=report.csv");
   Response.Write(strData);
   Response.Flush();
   Response.End();
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top