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%" allowfullscreen="true">     <script type="text/javascript">       $('#tt').show();     </script>     <p></p> </div>

(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 viewer.

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?

TIA, Dan

Have you tried something like this:

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

Jens

Jens,

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 I use a link to the show method

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

-Dan

Could you just render the pdf from the show action?

Colin

Please explain this suggestion futher.

Thanks, Dan

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

Chris

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.

Max,

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 it.) If so, please send me to a reference for this or supply an example.

Thanks, Dan