Saya mencoba menggunakan pdf.js dengan permintaan rentang (pemuatan progresif dokumen pdf), tetapi ketika saya mencoba memuat pdf dari url amazon s3 kesalahan ini muncul di konsol:
Menolak untuk mendapatkan header "Accept-Ranges" yang tidak aman
dan pdf tidak dimuat melalui 206 konten parsial (permintaan rentang) tetapi 200 dan setelah unduhan pdf selesai, dilihat di penampil.
ini adalah contoh url pdf:
https://kotob.s3.amazonaws.com/book.pdf?Signature=irgVfoAZuPPip5kpCesni2MzpLo%3D&Expires=1366576877&AWSAccessKeyId=AKIAILBHXSTPUIBTRMSA
bantuan apa pun
Apakah Anda melihat ini dengan viewer.html atau ekstensi firefox?
dengan viewer.html
Saya merasa ini gagal karena Anda membuat permintaan lintas-Asal.
Jika Anda memiliki Chrome, lihat apakah ini berfungsi:
Jalankan Chrome dengan --disable-web-security
(http://stackoverflow.com/questions/3102819/chrome-disable-same-origin-policy). Saat memuat file, tambahkan juga #disableWorker=true
.
Penutupan. Silakan buka kembali jika masih menjadi masalah.
Terima kasih @mduan atas tanggapannya,
tetapi kesalahan yang sama masih muncul bagi saya, dan untuk menjelaskannya dengan lebih baik, saya menempatkan penampil di dropbox dan ini adalah tautan publik yang dapat Anda coba:
https://dl.dropboxusercontent.com/u/37262502/PDF.js_mduan/pdf.js/web/viewer.html
penampil ini memberikan kesalahan:
tetapi ketika saya mengubah jalur pdf dari
DEFAULT_URL=' https://kotob.s3.amazonaws.com/neo.pdf '
ke :
DEFAULT_URL='neo.pdf'
dengan meletakkan file di direktori penampil yang sama, ini berfungsi dengan baik dengan permintaan rentang:
https://dl.dropboxusercontent.com/u/37262502/PDF.js_mduan/pdf.js/web/viewer2.html
dan perhatikan bahwa kami membuat kebijakan CORS dapat diakses dari sumber lain mana pun untuk mendapatkan permintaan.
saya harap itu bisa membantu dalam menjelaskan masalahnya.
dan mohon maaf atas keterlambatan respon saya,
ada bantuan?
Saya dapat merepro masalah di server lokal. Saya membuatnya berfungsi dengan meminta server yang menghosting PDF jarak jauh mengembalikan header HTTP berikut:
Access-Control-Allow-Headers: Range
Access-Control-Expose-Headers: Accept-Ranges, Content-Encoding, Content-Length, Content-Range
terima kasih @mduan atas bantuan Anda, ini berfungsi sekarang.
@mahmoudfelfel : bisakah Anda menutup masalah ini jika masalah Anda sudah diperbaiki? Terima kasih! :)
File Proxy dalam bahasa scripting, ( PHP, RoR, Python atau lainnya) adalah solusi yang sangat mudah.
Saya menemukan kesalahan yang sama. Dan menurut saya ini bisa / harus diperbaiki dalam pdf.js.
Saat memuat pdf dari domain lain, maka milik kita sendiri. Permintaan pra-penerbangan adalah wajib, tidak hanya untuk AWS tetapi juga untuk dokumen Mozilla , direkomendasikan untuk setiap permintaan CORS.
Kemudian Anda dapat menghindari instance proxy tambahan atau semacamnya. Sebagai solusi cepat, saya akan mencoba mengambil permintaan pdf (dengan preflight) untuk saya sendiri dan hanya meneruskan ByteArray ke pdf.js.
Saat memuat pdf dari domain lain, maka milik kita sendiri. Permintaan pra-penerbangan adalah wajib, tidak hanya untuk AWS tetapi juga untuk dokumen Mozilla, direkomendasikan untuk setiap permintaan CORS.
Permintaan preflight CORS dihasilkan oleh XHR secara otomatis tanpa intervensi JS pengguna.
Sebagai solusi cepat, saya akan mencoba mengambil permintaan pdf (dengan preflight) untuk saya sendiri dan hanya meneruskan ByteArray ke pdf.js.
Kedengarannya sebagai solusi yang sempurna: semua sarana komunikasi non-standar (kecuali mendapatkan HTTP/HTTPS biasa tanpa perlu CORS) harus ditangani oleh pengguna. Jika Anda yakin bahwa XHR akan dapat membuat url Anda (file, gumpalan, dengan CORS, dengan header auth, dll) konfigurasikan dengan benar.
Menutup karena tidak akan diperbaiki.
Saya terjebak dengan v0.8.180
dan saya tahu ini adalah masalah lama, meskipun jika itu membantu orang lain, konfigurasi CORS ember S3 berikut memperbaikinya untuk saya:
<?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 Saya sudah mencoba konfigurasi yang sama di konfigurasi CORS ember S3 kami. Aplikasi ini berfungsi di semua browser, dan FireFox tidak memiliki kesalahan. Webkit (Chrome/Safari) masih mengeluarkan Refused to get unsafe header "Accept-Ranges"
.
Saya memang memperhatikan bahwa Accept-Ranges: bytes
ada pada permintaan http file pdf, tetapi saya tidak melihat Content-Range
atau Content-Encoding
bertahan dari konfigurasi ke dalam permintaan http.
Mungkin perlu mengekspos Range selain Content-Range?
Saya mencobanya tanpa keberuntungan. Memutuskan untuk menyepakati masalah ini.
Konfigurasi CORS yang berfungsi dapat ditemukan di sini: https://github.com/mozilla/pdf.js/issues/4530#issuecomment -188059771
Kunci untuk membuat ini berfungsi adalah "rentang" Access-Control-Allow-Headers.
Dalam kasus saya, tetapi untuk streaming konten audio, tajuk ini tidak berfungsi
@simoncpu terima kasih atas temuan Anda!
Saya memiliki masalah yang sangat mirip, tetapi untuk konten audio. Dalam kasus saya, tajuk ini tidak akan berfungsi
{ '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' }
tanya di SF juga.
Komentar yang paling membantu
Saya dapat merepro masalah di server lokal. Saya membuatnya berfungsi dengan meminta server yang menghosting PDF jarak jauh mengembalikan header HTTP berikut: