سؤال

أستخدم إطار عمل Symfony2 واستخدام الكود التالي لتصدير ملف XML:

$response->setStatusCode(200);
$response->headers->set('Content-Type', 'application/xml');
$response->headers->set('Content-Description', 'Submissions Export');
$response->headers->set('Content-Disposition', 'attachment; filename="' . $filename .'"');
$response->headers->set('Content-Transfer-Encoding', 'binary');
$response->headers->set('Pragma', 'no-cache');
$response->headers->set('Expires', '0');

لا يهم ما إذا كنت آخذ "ترميز المحتوى" أو "pragma" أو جميعها باستثناء "نوع المحتوى" و "Disposition للمحتوى" بعيدًا. النتيجة في الكروم هي دائمًا: "اسم الملف ، المرفق" (بدون "). في Firefox يعمل هذا بشكل جيد.

لذلك على سبيل المثال ، إذا كان لدي ملف يسمى home.xml firefox ، فسيتم تنزيل home.xml ، في حين أن Chrome سيعطيني home.xml- ، مرفق.

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

المحلول

أعلم أن هذه مناقشة قديمة جدًا ، ولكن إذا حصل أي شخص هنا على البحث عن المساعدة في هذا ، فقد قررت أن Chrome يبدو أنه يريد فاصلاً في نهاية اسم الملف ثم يكون سعيدًا. كما في (vbscript):

Response.AddHeader "Content-Disposition", "attachment;filename=Something.xls;"

التي أصلحت لي. -هف

نصائح أخرى

واجهت نفس المشكلة في Zend لأنني وجدت الكثير من الأشياء غير العاملة التي أردت إضافة Anwser إلى هذا المنشور. نظرًا لأن الأمر استغرق بعض الوقت لحلها ، فقد اعتقد أن المزيد من المستخدمين والمطورين يريدون معرفة كيفية حلها. أضيف هذا قبل مكالمة fopen مباشرة.

header('Content-Disposition: attachment; filename='.time().'.csv');

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

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