2007/12/13, Patrick Robinson <[EMAIL PROTECTED]>:
>
> Well, it's always fun to reply to one's own emails.



First, the solution to (1) is to have the action method return a
> different page, e.g.
>
> public WOComponent downloadFile() {
>     WOComponent fileComponent = pageWithName("FileDownloadComponent");
>     fileComponent.setSelectedThing(aThing);
>     return fileComponent;
> }
>
> Then in FileDownloadComponent.appendToResponse(), you return the PDF:
>
> public void appendToResponse( ... ) {
>     res.setHeader(mimeType, "content-type");
>     res.setHeader("attachment; filename=" + filename, "content-
> disposition");
>     res.setContent(selectedThing.data());
>     res.disableClientCaching();
>     res.removeHeadersForKey("Cache-Control");
>     res.removeHeadersForKey("pragma");
> }


it would be a good idea to set also the Content-Type and the Content-Lenght
to help the browser to manage the download:

try (i assume selectedThing is a File)

res.setHeader(""+ selectedThing.length(), "Content-Length");

res.setHeader(WOApplication.application
().resourceManager().contentTypeForResourceNamed(selectedThing.getName()),
"Content-Type");

FileDownloadComponent's .html and .wod files are empty, so it doesn't
> seem to matter whether or not you call super.appendToResponse().


I think it's better to not call it

The result of doing it this way is that when I log the WOResponse in
> Application.dispatchRequest(), all I see is the PDF file response
> that I set, above.  I can click the link to invoke the action method
> repeatedly, but I only ever see the one WOResponse, now.

The solution to (2) is simply to change the content-disposition from
> "attachment" to "inline".  That is:
>     res.setHeader("inline; filename=" + filename, "content-
> disposition");


Does this bring some change in the workflow or is simply to have a better
log?

- Patrick
>
>
> On Dec 13, 2007, at 3:18 PM, Patrick Robinson wrote:
>
> > I've seen lots of examples for returning a PDF by fiddling with the
> > WOResponse in a component's appendToResponse() method.  Code like
> > this:
> >
> >     public void appendToResponse(WOResponse res, WOContext con) {
> >         super.appendToResponse(res, con);
> >         if (someCondition) {
> >             res.setContent(pdfFile);
> >             res.setHeader("application/pdf", "Content-Type");
> >             res.setHeader("attachment; filename=MyFile.pdf",
> > "Content-disposition");
> >             res.disableClientCaching();
> >             res.removeHeadersForKey("Cache-Control");
> >             res.removeHeadersForKey("pragma");
> >         }
> >     }
> >
> > We've made use of this kind of thing by having an action method
> > that sets "someCondition", as well as the details of what pdfFile
> > to download:
> >
> >     public void awake() {
> >         someCondition = false;
> >     }
> >
> >     public WOComponent downloadFile() {
> >         someCondition = true;
> >         pdfFile = nsDataForSelectedFile(selectedFile);
> >     }
> >
> > I have two problems:
> > (1) I was getting the PDF downloaded only every other time I
> > clicked the link bound to the downloadFile() action method.
> > Because I was curious, I implemented Application.dispatchRequest(),
> > and discovered that the first time I clicked the link, I'd get a
> > PDF file in the WOResponse.  The next time I clicked it, the
> > WOResponse would contain the HTML of the page where the link
> > lived!  Then, the next time, I'd get the pdf again.  Why is this?
> >
> > (2) I'd like to get the pdf to open in the browser, in the Acrobat
> > plugin (if there is one), rather than downloading it to the
> > downloaded file dir.  I've read things suggesting that:
> > - you just need to change the content-disposition from "attachment"
> > to "inline".
> > - you may also need to specify "; name=MyFile.pdf" after the
> > "application/pdf" content-type.
> > - you may or may not need to specify the content-length.
> > - you shouldn't be calling super.appendToResponse().  I don't
> > understand how this would make a difference, as I'm replacing the
> > response's content, anyway.
> > But none of these things seems to work.  Just changing the content-
> > disposition to inline has the effect of making the browser window
> > go black for a sec, then back to the HTML page (making me think
> > maybe I was on the right track).
> > At this point, I discovered problem (1), and wondered if the way
> > I'm mangling the WOResponse has something to do with it.
> >
> > Anyone have any insights?  I'd sure appreciate it!
> >
> > --
> > Patrick Robinson
> > AHNR Info Technology, Virginia Tech
> > [EMAIL PROTECTED]
> >
> >
> >
> > _______________________________________________
> > Do not post admin requests to the list. They will be ignored.
> > Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com)
> > Help/Unsubscribe/Update your Subscription:
> > http://lists.apple.com/mailman/options/webobjects-dev/pgr%40vt.edu
> >
> > This email sent to [EMAIL PROTECTED]
>
> --
> Patrick Robinson
> AHNR Info Technology, Virginia Tech
> [EMAIL PROTECTED]
>
>
>
> _______________________________________________
> Do not post admin requests to the list. They will be ignored.
> Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com)
> Help/Unsubscribe/Update your Subscription:
> http://lists.apple.com/mailman/options/webobjects-dev/ildenae%40gmail.com
>
> This email sent to [EMAIL PROTECTED]
>



-- 
Daniele Corti
AIM: S0CR4TE5
Messenger: [EMAIL PROTECTED]

--
Computers are like air conditioners -- they stop working properly if you
open
WINDOWS

-- 
What about the four lusers of the apocalypse? I nominate:
"advertising", "can't log in", "power switch" and "what backup?"
--Alistair Young
 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com)
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

This email sent to [EMAIL PROTECTED]

Reply via email to