λ²μ μμ²(pdf λ¬Έμμ μ μ§μ λ‘λ)κ³Ό ν¨κ» pdf.jsλ₯Ό μ¬μ©νλ €κ³ νμ§λ§ amazon s3 URLμμ pdfλ₯Ό λ‘λνλ €κ³ ν λ μ΄ μ€λ₯κ° μ½μμ λνλ©λλ€.
μμ νμ§ μμ ν€λ "Accept-Ranges" κ°μ Έμ€κΈ°λ₯Ό κ±°λΆνμ΅λλ€.
pdfλ 206κ°μ λΆλΆ μ½ν μΈ (λ²μ μμ²)λ₯Ό ν΅ν΄ λ‘λλμ§ μμ§λ§ 200κ° λ° pdf λ€μ΄λ‘λκ° μλ£λ ν λ·°μ΄μμ λ³Ό μ μμ΅λλ€.
μ΄κ²μ pdf urlμ μμ
λλ€.
https://kotob.s3.amazonaws.com/book.pdf?Signature=irgVfoAZuPPIp5kpCesni2MzpLo%3D&Expires=1366576877&AWSAccessKeyId=AKIAILBHXSTPUIBTRMSA
μ΄λ€ λμ
viewer.html λλ νμ΄μ΄νμ€ νμ₯ νλ‘κ·Έλ¨μμ μ΄κ²μ λ³΄κ³ κ³μλκΉ?
Viewer.html μ¬μ©
κ΅μ°¨ μΆμ² μμ²μ νκ³ μκΈ° λλ¬Έμ μ΄κ²μ΄ μ€ν¨νκ³ μλ€κ³ μκ°ν©λλ€.
Chromeμ΄ μλ κ²½μ° μλνλμ§ νμΈνμΈμ.
--disable-web-security
λ‘ Chromeμ μ€νν©λλ€(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
get μμ²μ λν΄ λ€λ₯Έ λͺ¨λ μΆμ²μμ 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 μ€ν μ μμ²μ μ¬μ©μ JS κ°μ μμ΄ XHRμ μν΄ μλμΌλ‘ μμ±λ©λλ€.
λΉ λ₯Έ ν΄κ²° λ°©λ²μΌλ‘ pdf(ν리νλΌμ΄νΈ ν¬ν¨) μμ²μ κ°μ Έμ€κ³ ByteArrayλ₯Ό pdf.jsμ μ λ¬νλ €κ³ ν©λλ€.
μλ²½ν ν΄κ²° λ°©λ²μΌλ‘ λ€λ¦½λλ€. λͺ¨λ λΉνμ€ ν΅μ μλ¨(CORSκ° νμ μλ μΌλ° HTTP/HTTPS μ μΈ)μ μ¬μ©μκ° μ²λ¦¬ν΄μΌ ν©λλ€. XHRμ΄ URL(νμΌ, blob, CORS ν¬ν¨, μΈμ¦ ν€λ ν¬ν¨ λ±)μ κ°μ§ μ μλ€κ³ νμ νλ κ²½μ° μ μ νκ² κ΅¬μ±νμμμ€.
μ’ λ£νλ©΄ ν΄κ²°λμ§ μμ΅λλ€.
λλ v0.8.180
κ°ν μκ³ μ΄κ²μ΄ μ€λλ λ¬Έμ λΌλ κ²μ μκ³ μμ§λ§ λ€λ₯Έ μ¬λμκ² λμμ΄ λλ κ²½μ°λ₯Ό λλΉνμ¬ λ€μ S3 λ²ν· CORS ꡬμ±μ΄ λ¬Έμ λ₯Ό ν΄κ²°νμ΅λλ€.
<?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 S3 λ²ν· CORS ꡬμ±μμ λμΌν ꡬμ±μ μλνμ΅λλ€. μμ© νλ‘κ·Έλ¨μ λͺ¨λ λΈλΌμ°μ μμ μλνλ©° FireFoxμλ μ€λ₯κ° μμ΅λλ€. Webkit(Chrome/Safari)μ μ¬μ ν Refused to get unsafe header "Accept-Ranges"
λ₯Ό λ°μμν΅λλ€.
Accept-Ranges: bytes
κ° pdf νμΌ http μμ²μ μλ€λ κ²μ μμμ§λ§ Content-Range
λλ Content-Encoding
κ° κ΅¬μ±μμ http μμ²μΌλ‘ μ§μλλ κ²μ λ³Ό μ μμ΅λλ€.
Content-Range μΈμλ Rangeλ₯Ό λ ΈμΆν΄μΌ ν©λκΉ?
λλ μ΄ μμ΄ κ·Έκ²μ λμ‘λ€. λ¬Έμ μ ννΈνκΈ°λ‘ κ²°μ νμ΅λλ€.
μλνλ CORS ꡬμ±μ https://github.com/mozilla/pdf.js/issues/4530#issuecomment -188059771μμ μ°Ύμ μ μμ΅λλ€.
μ΄ μμ μ ν΅μ¬μ Access-Control-Allow-Headers "λ²μ"μ λλ€.
μ κ²½μ°μλ μ€λμ€ μ½ν μΈ μ€νΈλ¦¬λ°μ κ²½μ° μ΄ ν€λκ° μλνμ§ μμμ΅λλ€.
@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 ν€λλ₯Ό λ°ννλλ‘ νμ¬ μλνλλ‘ νμ΅λλ€.