أحاول استخدام pdf.js مع طلبات النطاق (التحميل التدريجي لمستند pdf) ، ولكن عندما أحاول تحميل ملفات PDF من عناوين url الخاصة بـ amazon s3 ، يظهر هذا الخطأ في وحدة التحكم:
تم رفض الحصول على العنوان غير الآمن "Accept-Ranges"
ولا يتم تحميل ملف pdf عبر 206 محتوى جزئي (طلبات النطاق) ولكن يتم عرض 200 بعد اكتمال تنزيل ملف pdf في العارض.
هذا مثال على عنوان url بتنسيق pdf:
https://kotob.s3.amazonaws.com/book.pdf؟Signature=irgVfoAZuPPIp5kpCesni2MzpLo٪3D&Expires=1366576877&AWSAccessKeyId=AKIAILBHXSTPUIBTRMSA
أي مساعدة
هل ترى هذا مع viewer.html أو امتداد Firefox؟
مع viewer.html
أشعر أن هذا فاشل لأنك تقدم طلبًا متعدد المصادر.
إذا كان لديك Chrome ، فتحقق مما إذا كان هذا يعمل:
قم بتشغيل Chrome باستخدام --disable-web-security
(http://stackoverflow.com/questions/3102819/chrome-disable-same-origin-policy). عند تحميل الملف ، قم أيضًا بإلحاق #disableWorker=true
.
إغلاق. يرجى إعادة الفتح إذا كانت لا تزال تمثل مشكلة.
شكرا mduan لاستجابتك ،
لكن الخطأ نفسه لا يزال يظهر لي ، ولتوضيح ذلك بشكل أفضل ، وضعت العارض في صندوق الإسقاط وهذه هي الروابط العامة التي يمكنك تجربتها:
https://dl.dropboxusercontent.com/u/37262502/PDF.js_mduan/pdf.js/web/viewer.html
يعطي هذا العارض الخطأ:
ولكن عندما قمت بتغيير مسار pdf من
DEFAULT_URL = ' https://kotob.s3.amazonaws.com/neo.pdf '
ل :
DEFAULT_URL = 'neo.pdf'
بوضع الملف في دليل العارض نفسه ، فإنه يعمل بشكل جيد مع طلبات النطاق:
https://dl.dropboxusercontent.com/u/37262502/PDF.js_mduan/pdf.js/web/viewer2.html
ولاحظ أننا نجعل سياسة CORS متاحة من أي مصدر آخر للحصول على الطلبات.
آمل أن يساعد ذلك في شرح المشكلة.
وأنا آسف لتأخري في الرد ،
أي مساعدة ؟
تمكنت من إعادة حل المشكلة على خادم محلي. لقد جعلته يعمل من خلال جعل الخادم الذي يستضيف ملف PDF البعيد يعيد رؤوس HTTP التالية:
Access-Control-Allow-Headers: Range
Access-Control-Expose-Headers: Accept-Ranges, Content-Encoding, Content-Length, Content-Range
شكرًا mduan على مساعدتك ، إنها تعمل الآن.
mahmoudfelfel : هل يمكنك إغلاق هذه المشكلة إذا تم حل مشكلتك؟ شكرا لك! :)
يعد ملف الوكيل بلغة برمجة نصية (PHP أو RoR أو Python أو غيرها) حلاً سهلاً للغاية.
لقد عثرت على نفس الخطأ. وفي رأيي يمكن / يجب إصلاح هذا في pdf.js.
عند تحميل ملف pdf من مجال آخر ، فعندئذٍ مجالنا. طلبات الاختبار المبدئي إلزامية ، ليس فقط لـ AWS ولكن فيما يتعلق بمستندات Mozilla ، يوصى بها لكل طلب CORS.
ثم يمكنك تجنب مثيل وكيل إضافي أو ما شابه. كعمل سريع ، سأحاول إحضار طلب pdf (مع الاختبار المبدئي) الخاص بي ثم تمرير ByteArray إلى pdf.js.
عند تحميل ملف pdf من مجال آخر ، فعندئذٍ مجالنا. طلبات الاختبار المبدئي إلزامية ، ليس فقط لـ AWS ولكن فيما يتعلق بمستندات Mozilla ، يوصى بها لكل طلب CORS.
يتم إنشاء طلبات الاختبار المبدئي لـ CORS بواسطة XHR تلقائيًا دون تدخل المستخدمين من JS.
كعمل سريع ، سأحاول إحضار طلب pdf (مع الاختبار المبدئي) الخاص بي ثم تمرير ByteArray إلى pdf.js.
يبدو حلًا مثاليًا: يجب على المستخدم التعامل مع جميع وسائل الاتصال غير القياسية (باستثناء الحصول على HTTP / HTTPS بدون الحاجة إلى CORS). إذا كنت متأكدًا من أن XHR سيكون قادرًا على تكوين عنوان url الخاص بك (ملف ، blob ، مع CORS ، مع رأس المصادقة ، إلخ) بشكل صحيح.
الإغلاق كما لن يتم إصلاحه.
أنا عالق مع v0.8.180
وأنا أعلم أن هذه مشكلة قديمة ، على الرغم من أنها تساعد أي شخص آخر ، إلا أن تكوين CORS دلو S3 التالي قد أصلحه لي:
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedHeader>*</AllowedHeader>
<ExposeHeader>Accept-Ranges</ExposeHeader>
<ExposeHeader>Content-Range</ExposeHeader>
<ExposeHeader>Content-Encoding</ExposeHeader>
<ExposeHeader>Content-Length</ExposeHeader>
</CORSRule>
</CORSConfiguration>
jpillora لقد جربت نفس التكوين في تكوين CORS الخاص بدلو S3. يعمل التطبيق في جميع المتصفحات ، ولا يحتوي FireFox على أخطاء. لا يزال Webkit (Chrome / Safari) يطرح Refused to get unsafe header "Accept-Ranges"
.
لقد لاحظت أن Accept-Ranges: bytes
موجود في طلب http لملف pdf ، لكنني لا أرى Content-Range
أو Content-Encoding
مستمرًا من التكوين إلى طلب http.
ربما يحتاج إلى كشف Range بالإضافة إلى Content-Range؟
لقد أعطيتها رصاصة دون حظ. قررت أن تراهن على هذه القضية.
يمكن العثور على تهيئة CORS عاملة هنا: https://github.com/mozilla/pdf.js/issues/4530#issuecomment -188059771
المفتاح للقيام بهذا العمل هو Access-Control-Allow-Headers "range".
في حالتي ، ولكن بالنسبة لدفق المحتويات الصوتية ، لم تكن هذه الرؤوس تعمل على أي حال
simoncpu شكرا لك على النتائج الخاصة بك!
لدي مشكلة مشابهة جدًا ، لكن لمحتويات الصوت. في حالتي لن تعمل هذه الرؤوس بالمناسبة
{ 'Content-Length': 5751405,
'Content-Type': 'audio/mpeg',
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'POST, GET, OPTIONS',
'Access-Control-Allow-Headers': 'Range',
Expires: 0,
Pragma: 'no-cache',
'Cache-Control': 'no-cache, no-store, must-revalidate',
'Accept-Ranges': 'bytes',
'Content-Range': 'bytes 120429-240237/5751405' }
طلب على SF كذلك.
التعليق الأكثر فائدة
تمكنت من إعادة حل المشكلة على خادم محلي. لقد جعلته يعمل من خلال جعل الخادم الذي يستضيف ملف PDF البعيد يعيد رؤوس HTTP التالية: