سؤال

كنت أحاول تنفيذ "رابط تنزيل" ووضعه بجانب أحد جدول التقرير الخاص بي حتى يتمكن المستخدمون من تنزيل ملف CSV وفتحه مع تطبيقات مثل Excel.

يتم إنشاء السجلات ديناميكيًا بناءً على الاستعلام الذي قام به المستخدمون.

لذلك في مكان ما في وحدة التحكم الخاصة بي ، هناك شيء مثل:

response.headers['Content-Type'] = 'text/csv'
response.headers['Content-Disposition'] = 'attachment; filename=xxx.csv'
return response.stream(dynamically_generated_csv, request=request)

هذا يعمل في كل من Firefox & Chrome ، لكنه فشل في IE.

عندما أقوم بطباعة رؤوس الاستجابة ، وجدت أنه تمت إضافة العديد من الرؤوس إلى ردي بواسطة Web2Py: "انتهاء الصلاحية" ، "Cache-Control" ، إلخ ...

وعندما أقوم بإزالة رأس "السيطرة على ذاكرة التخزين المؤقت" عن طريق القيام بما يلي:

del response.headers['Cache-Control']

إنه يعمل في IE.

لذلك يبدو أن IE تواجه مشكلة في التعامل مع ملف قابل للتنزيل مع "Cache-Control" إلى قيمة معينة.

الآن ، سؤالي هو:

  • لماذا تضيف Web2Py رؤوس الاستجابة هذه ، ضمنيًا؟ وربما بدون وسيلة لإزالةها؟

  • هل هناك أي تأثير جانبي عندما أحذف رأس "السيطرة على ذاكرة التخزين المؤقت" بهذه الطريقة؟

شكرا لك مقدما.

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

المحلول

لست متأكدًا من أن رؤوس التحكم في ذاكرة التخزين المؤقت يتم إرسالها/تم إرسالها ولكن IE لديها خطأ مع ملفات تم تنزيلها كما تواجهك.

ل IE ، يجب عليك تمكين التخزين المؤقت. عندما يقوم IE بتحميل الملفات (على سبيل المثال ملفات Excel) ، في Excel ، فإنه يقوم بتحميلها من دليل ذاكرة التخزين المؤقت ، وبالتالي إذا لم تقم بتخزين مؤقت ، فسوف تفشل Excel (أو تطبيقك الآخر) في تحميل الملف.

إريك لو (MSFT) حول هذا الموضوع: http://blogs.msdn.com/ieinternals/archive/2009/10/02/internet-explorer-cannot-download-over-https-when-no-cache.aspx

تحديث: إذا كنت ترغب فقط في إجبار التنزيل ... على سبيل المثال ، لم يتم تحميل ملف Excel داخل نافذة IE ... ثم تأكد من تعيين الرؤوس الكاملة للمرفق.

//PHP style
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment; filename="downloaded.pdf"');

نصائح أخرى

هل رابط التنزيل باستخدام HTTPS (SSL)؟ إذا كان الأمر كذلك ، فلا يمكنك التعامل مع التنزيل إذا تم تعيينه ليتم تخزينه مؤقتًا. هذه مشكلة معروفة مع IE.

هذا لا يجيب على سؤالك ، ولكنه يحل ، آمل ، المشكلة الأصلية.

أود فقط إضافة الطابع الزمني (شيء فريد بما فيه الكفاية) للاستعلام عن سلسلة الارتباط إلى ملف CSV. لقد ساعدني.

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