Display PDF from Amazon S3 in new window for iPad etc.

Hello RoR experts,

I am trying to display a PDF stored out at Amazon S3 (private) using a
keyed, expiring URL in a new window.

I cannot display a direct link to the PDF (since it expires), instead I
use a link to the show method, which does the following

<div id="tt">
    <embed src="<%= @book.file_path %>" width="100%" height="100%"
    <script type="text/javascript">

(where @book.file_path returns the keyed URL to the PDF)

This displays the PDF in a popup window however, I just want to display
the PDF in a NEW browser window or, even better, in the native PDF

I need to do this because on mobile devices (read iPad), this popup
doesn't work well. It draws the popup at the top of the page and the
user cannot see it unless he/she scrolls to the top. Even if they do
find it, the native behavior of the iPad PDF viewer--which is pretty
nice--is not there. i.e. I want it to behave just like it would if the
link were directly to the PDF.

I have tried window.open('mypdfpath') and many other combinations.

Is anyone doing this or have an idea how to approach it?


Have you tried something like this:

<%= link_to “LINKNAME”, @book.file_path, :target => “_blank” %>



Thanks for the reply, I'm pretty sure that would work BUT--as I said
in my post...

I cannot display a direct link to the PDF (since it expires), instead
use a link to the show method

So the link is sent from the show method and then opened at once.


Could you just render the pdf from the show action?


Please explain this suggestion futher.


Can't you just make 'show' action redirect to the S3 URL (i.e. using
the 'redirect_to' method)?


If the account / S3 URL should not be shown to the user, you could
stream the pdf content to them directly with your app as the proxy and
just set the appropriate http headers to give the user a suggested
name for the content - doing it this way will trigger the browser to
use whatever application is associated with PDF on their system to
display the content.


This sounds elegant but I haven't a clue how to start doing it. :slight_smile:

In this scenario, the PDF still moves directly from S3 to the user's
browser, correct? (It's too slow to pull it locally and then send
If so, please send me to a reference for this or supply an example.