Right click on that image and click on Copy image and then past it somewhere like Gimp or Photoshop. :D

Anyway, if you use a LoadableDetachableModel, it is possible and actually, recommended, to delete the file right after the download. Just make sure it is not a file that will be download several times. If this is the case, think on something else like a timer, to keep that file in disk for a while.

Cheers,
Bruno

On Oct 13, 2008 10:17am, Johan Compagner <[EMAIL PROTECTED]> wrote:
Deleting a file right after a first download also has its problems,

My HP network printer/scanner does that, i can scan to an image, but

firefox displayes then that image and what ever i do then to save it

to disk, i get nothing because FF seems to want to get it again for

saving bu hp doesnt serve it anymore, i have to use IE7 for that to

get my scanned image. HP really should do more testing! And serve the

resource differently.



On 10/13/08, Bruno Borges wrote:

> I think is better to create a temporary file and set DownloadLink to
delete

> it after download is complete. I don't think is a good idea to let the
user

> download directly from the database as you proposed. See, downloads can
take

> some time and letting that InputStream open, might be a problem. The
latency

> of an external download is bigger than downloading from a local
database.

>

> Cheers,

> Bruno Borges

> blog.brunoborges.com.br

> +55 21 76727099

>

> "The glory of great men should always be

> measured by the means they have used to

> acquire it."

> - Francois de La Rochefoucauld

>

>

> On Fri, Oct 10, 2008 at 10:04 PM, Dane Laverty

> wrote:

>

>> Thank you for the advice. Here's the solution I came up with, in case

>> it's useful to anyone else.

>>

>> First I used the DownloadLink as a template for my "blobDownloadLink".

>> Then I created an InputStreamResourceStream, which is essentially a

>> barely modified version of Wicket's FileResourceStream, taking an

>> InputStream as the constructor parameter instead of a File. The code
for

>> both of those is below.

>>

>> While this solution works, the two issues still hanging in my mind are:

>> 1. I'm sure there's an easier way to get the InputStream into an

>> IResourceStream than to create an InputStreamResourceStream class...I

>> just couldn't figure out what it is.

>> 2. When I get the Blob from the database like this,

>>

>> rs.getBinaryStream(1);

>>

>> the returned BinaryStream doesn't work. Doing this,

>>

>> java.sql.Blob blob = rs.getBlob(1);

>> return blob.getBinaryStream();

>>

>> doesn't work either. So I ended up doing,

>>

>> java.sql.Blob blob = rs.getBlob(1);

>> byte[] bytes = new byte[(int)blob.length()];

>> try {

>> blob.getBinaryStream().read(bytes);

>> } catch (IOException ioe) {

>> // handle it

>> }

>> return new ByteArrayInputStream(bytes);

>>

>> Not pretty, but it works.

>>

>> *******

>> // Relevant code for blobDownloadLink

>>

>> Link blobDownloadLink = new Link("blobDownloadLink") {

>> @Override

>> public void onClick() {

>> InputStream inputStream =

>> //getBlobAsInputStreamFromDatabase();

>>

>> IResourceStream resourceStream =

>> new InputStreamResourceStream(inputStream);

>>

>> getRequestCycle().setRequestTarget(new

>> ResourceStreamRequestTarget(resourceStream)

>> {

>> public String

>> getFileName()

>> {

>> return

>> //theFileNameYouWantAssociatedWithThisDownload;

>> }

>>

>> public void

>> respond(RequestCycle requestCycle)

>> {

>>

>> super.respond(requestCycle);

>>

>> }

>> });

>>

>> try {

>> inputStream.close();

>> } catch (IOException ioe) {

>> logger.error("Error

>> attempting to close inputStream in blobDownloadLink.", ioe);

>> }

>> };

>> };

>>

>> ********

>> // Relevant code for InputStreamResourceStream

>>

>> import java.io.IOException;

>> import java.io.InputStream;

>> import org.apache.wicket.util.resource.AbstractResourceStream;

>> import org.apache.wicket.util.resource.ResourceStreamNotFoundException;

>>

>> /**

>> * An InputStreamResourceStream is an IResource implementation for

>> files.

>> *

>> * @see org.apache.wicket.util.resource.IResourceStream

>> * @see org.apache.wicket.util.watch.IModifiable

>> * @author Dane Laverty

>> */

>> public class InputStreamResourceStream extends AbstractResourceStream

>> {

>> private static final long serialVersionUID = 1L;

>>

>> /** Resource stream */

>> private transient InputStream inputStream;

>>

>> /**

>> * Constructor.

>> *

>> * @param inputStream

>> * [EMAIL PROTECTED] InputStream} containing resource

>> */

>> public InputStreamResourceStream(InputStream inputStream)

>> {

>> this.inputStream = inputStream;

>> }

>>

>> /**

>> * Closes this resource.

>> *

>> * @throws IOException

>> */

>> public void close() throws IOException

>> {

>> if (inputStream != null)

>> {

>> inputStream.close();

>> inputStream = null;

>> }

>> }

>>

>> /**

>> * @see IResourceStream#getContentType()

>> */

>> public String getContentType()

>> {

>> // Let ResourceStreamRequestTarget handle content-type

>> automatically

>> return null;

>> }

>>

>> /**

>> * @return A readable input stream for this resource. The same

>> input stream is returned until

>> * InputStreamResourceStream.close() is

>> invoked.

>> *

>> * @throws ResourceStreamNotFoundException

>> */

>> public InputStream getInputStream() throws

>> ResourceStreamNotFoundException

>> {

>> if (inputStream == null)

>> throw new

>> ResourceStreamNotFoundException("InputStream could not be found");

>>

>> return inputStream;

>> }

>>

>> }

>>

>>

>> -----Original Message-----

>> From: Igor Vaynberg [mailto:[EMAIL PROTECTED]

>> Sent: Friday, October 10, 2008 3:37 PM

>> To: users@wicket.apache.org

>> Subject: Re: Downloading a BLOB

>>

>> i didnt say use the downloadlink, i said see how it works...

>>

>> -igor

>>

>> On Fri, Oct 10, 2008 at 3:32 PM, Dane Laverty

>> wrote:

>> > DownloadLink appears to accept only a file pathname. If I understand

>> it

>> > correctly, the only way I could use that would be to read the BLOB

>> into

>> > a file on the server, and then have the DownloadLink point to that

>> file.

>> > I believe that would require me to have the file created when the
page

>> > is generated, rather than when the link is clicked. Since there are

>> > going to be many links on this page, I would rather be able to wait

>> > until the user clicks the link to stream the BLOB to them.

>> >

>> > -----Original Message-----

>> > From: Igor Vaynberg [mailto:[EMAIL PROTECTED]

>> > Sent: Friday, October 10, 2008 3:26 PM

>> > To: users@wicket.apache.org

>> > Subject: Re: Downloading a BLOB

>> >

>> > see how downloadlink works

>> >

>> > -igor

>> >

>> > On Fri, Oct 10, 2008 at 3:21 PM, Dane Laverty

>> > wrote:

>> >> The title basically says it all. I've got a BLOB in a database, and
I

>> >> want the user to be able to click a link and download it. Any wicket

>> >> solutions to do this? Thanks much.

>> >>

>> >>

>> >>

>> >>

>> >

>> > ---------------------------------------------------------------------

>> > To unsubscribe, e-mail: [EMAIL PROTECTED]

>> > For additional commands, e-mail: [EMAIL PROTECTED]

>> >

>> >

>> > ---------------------------------------------------------------------

>> > To unsubscribe, e-mail: [EMAIL PROTECTED]

>> > For additional commands, e-mail: [EMAIL PROTECTED]

>> >

>> >

>>

>> ---------------------------------------------------------------------

>> To unsubscribe, e-mail: [EMAIL PROTECTED]

>> For additional commands, e-mail: [EMAIL PROTECTED]

>>

>>

>> ---------------------------------------------------------------------

>> To unsubscribe, e-mail: [EMAIL PROTECTED]

>> For additional commands, e-mail: [EMAIL PROTECTED]

>>

>>

>



---------------------------------------------------------------------

To unsubscribe, e-mail: [EMAIL PROTECTED]

For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to