ruby on rails ถ้าเราต้องการให้ผู้ใช้ สามารถ ดาวโหลด ไฟร์จากเว็บเราจะทำอย่างไรครับ

  • warning: realpath() [function.realpath]: SAFE MODE Restriction in effect. The script whose uid is 1005 is not allowed to access /tmp owned by uid 0 in /var/www/sites/sugree/codenone.com/subdomains/www/html/includes/file.inc on line 190.
  • warning: realpath() [function.realpath]: SAFE MODE Restriction in effect. The script whose uid is 1005 is not allowed to access /tmp owned by uid 0 in /var/www/sites/sugree/codenone.com/subdomains/www/html/includes/file.inc on line 190.

คือ ผมมีไฟร์ pdf อยู่1 ไฟร์ครับ ต้องการให้มันรันบนหน้าเว็ปอะครับ

และอาจจะมีไฟร์อื่นที่ อาจจะให้โหลดได้อีกอะครับ

ผมใช้ คำสั่ง

render :file => “app/views/po/pdf/po.pdf”

มันเปิด อย่างกะ เปิดไฟร์ ใน text editer เลยครับ

ผมคิดว่า .. สิ่งที่คุณต้องการจะทำ น่าจะเป็นอย่างนี้นะครับ:

redirect_to "/public/pdf/po.pdf"

แล้วเอาไฟล์ไว้ใน public folder แทน

ถามว่าทำไม .. เพราะว่าจริงๆ แล้วการที่เราคลิ๊กลิงค์ไปยังไฟล์ pdf เนี่ย การที่มันเปิดขึ้นมาในหน้าต่าง browser มันเป็นเพราะว่าเจ้า Adobe Reader มันทำหน้าที่เป็น plugin ใน browser ของเราครับ แค่เราทำการ redirect ไปยังไฟล์ pdf เท่านั้นมันก็น่าจะเปิดใน browser แล้วล่ะครับ ถ้าเราตั้งค่าไว้ถูก :D

ออใช่ หรืออีกอย่างนึง ในหน้าที่จะลิงค์ไปไฟล์ pdf ก็สั่ง

link_to "Download PDF", "/public/pdf/po.pdf"

(ไฟล์อยู่ที่ public เหมือนเดิมครับ)

เพื่อที่ให้มันลิงค์ไปยังไฟล์ที่จะเก็บ pdf ก็ได้ครับ :D

redirect_to

ขอบพระคุณท่านอาจารย์อย่างสูงเลยครับ

ถ้าจะทำอย่างนี้ อย่าลืมว่าไฟล์จะต้องอยู่ใน path ที่เข้าถึงได้โดยตรงจาก browser ด้วยนะครับ (เช่น อยู่ใน public/ ) เป็นต้นนะครับ

ถ้าต้องการให้ส่งไฟล์ที่เข้าตรง ๆ ไม่ได้ (เช่นต้อง login ก่อน) สามารถใช้คำสั่ง send_data ใน controller ได้นะครับ แต่ว่าถ้าไฟล์ใหญ่ ๆ มันจะโหลดเข้ามาใน mem ก่อน อาจจะช้าได้

ที่ผมเคยทำผมใช้วิธี X-Sendfile ตามอันนี้น่ะครับ ใช้ได้กับ production ที่รัน mongrel บน apache แต่ต้องลง module xsendfile ที่ apache ก่อนน่ะครับ

ย้าย Codenone

ประกาศย้าย Codenone ไปใช้ Forum ของ Blognone แทนครับ ตามไปตั้งกระทู้ต่อได้ที่ Codenone Forum (รายละเอียดอ่านจากกระทู้ ย้าย Codenone ไปรวมกับ Blognone)

กระทู้เก่าๆ จะย้ายตามไปในภายหลัง ตอนนี้ปิดการโพสต์กระทู้ไว้ เหลือไว้เฉพาะอ้างอิงเท่านั้น