كيف يمكنني إصلاح فايرفوكس في محاولة "حفظ الصورة باسم" .htm؟

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

سؤال

لقد نفذنا مؤخرا Amazon S3 في موقعنا مما دفعنا إلى تغيير الطريقة التي تعاملنا بها مع الصور. اعتدنا أن نسمي وحدة تحكم /fotos.php التي من شأنها قراءة الملف من القرص وتسجيل بعض الإحصاءات وتعيين الرؤوس وإرجاع محتويات الملف كصورة / JPEG.

ذهب كل شيء موافق حتى S3. يقوم Fotos.php الآن بإعادة توجيه 302 إلى المورد في Amazon وكل شيء لطيف والعمل، ولكن لا يمكنك حفظ صورة في Firefox لأنها تحدد نوع الملف الخاص به .htm. لقد وجدت هذه المناقشة حول هذه المسألة، ويبدو أن خطأ في فايرفوكس:

https://bugs.launchpad.net/ubuntu/+source/firefox-3.0/+Bug/207670.

هنا عنوان URL الذي يظهر المشكلة (حاول حفظ الصورة الكبيرة):

http://www.viajeros.com/fotos/el-gran-lago-de-atitlan-y-sus-volcanes/132968.

Internet Explorer 6 على الأقل يحاول حفظه كما untitlet.bmp.

هنا هو مقتطف الكود الذي نستخدمه في Fotos.php:

Archivo $ = $ fotos-> obtenerpathfotoamazon ($ URL، NULL)؛ إذا (فارغ ($ _ احصل على ['nocache'])) {header ('http / 1.0 302 موجود ")؛ رأس ("انتهاء الصلاحية:" .gmdate ("D، D MYIM: I: S"، الوقت () + 315360000). "GMT")؛ رأس ("التحكم في التخزين المؤقت: ماكس العمر = 315360000")؛ } آخر {header ('http / 1.0 307 إعادة توجيه مؤقت)؛ } رأس ('الموقع:'. AWS_BUCKET_URL. $ archivo)؛ موت؛

هل تعرف حل الحل لهذا؟

تحرير: نحن نستخدم CloudFront أيضا.

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

المحلول

محاولة تحديد نوع المحتوى من الصورة معheader('Content-Type: image/jpeg'); أوheader('Content-Type: image/png');

ربما عليك استخدام مرفق التخلص من المحتوى للسماح PHP بتحديد نوع المحتوى (الموقع ترك المهمة إلى خادم الويب)

$archivo = $fotos->ObtenerPathFotoAmazon( $url, null );

if (empty($_GET['nocache'])) {
   header('HTTP/1.0 302 Found');
   header("Expires: ".gmdate("D, d M Y H:i:s", time()+315360000)." GMT");
   header("Cache-Control: max-age=315360000");
} 

header('Content-Type: image/jpeg');
header("Content-Disposition: attachment; filename='$archivo'");
readfile(AWS_BUCKET_URL .$archivo);
die();

نصائح أخرى

انها ليست علة

S3 نفسه لا يعرف ما mimetype الكائن الذي تخزنه هو. عندما انت وضع الكائن في S3 تحتاج إلى تشمل أيضا نوع المحتوى و المحتوى التصرف رؤوس (وأي شيء آخر قد تريد). عند القيام بذلك، سيستجيب S3 بقيم الرأس عندك، أو أي شخص آخر، احصل علىالكائن

نظرا لأن هذا الخطأ لا يقتصر على Firefox (IE يحاول أيضا حفظه كنوع خاطئ، على الرغم من أنه يدرك على الأقل أنه صورة)، فسأخظ أن S3 يعود إلى نوع MIME غير صحيح للملف.

عندما يسأل الناس هذا على المنتديات الأخرى أشير إليهم في اتجاه هذا البرنامج النصي. وبعد ليس عليك استخدام كل ذلك، ولكنه مؤشر جميل في الاتجاه الصحيح.

لن أكتب أكثر كما أجاب الآخرون على هذا جيدا بما فيه الكفاية.

ركضت في هذه القضية نفسي مرة واحدة. أعتقد أن الحل الحقيقي الوحيد لذلك (في ذلك الوقت) كان لإلحاق شيء مثل "# .jpg" إلى نهاية عنوان URL. يجب ألا يؤثر ذلك على المعالجة الخاصة بك وسوف تجبر FF لتعيين نوع التنزيل إلى JPG.

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