11

When a user clicks on an image on a web page, I'd like to trigger the browser's Save Image dialog and to let the user save the image on their hard drive. Is there a cross-browser way to do this with jQuery/Javascript?

5 Answers 5

11

Not precisely, but you can do it by hyperlinking to the img file and setting the content-type and content-disposition headers in the server response. Try, e.g., application/x-download, plus the other headers specified here.

Sign up to request clarification or add additional context in comments.

4 Comments

as Craig says, just wrap the image with a hyperlink, that points to a file (with the appropriate headers set) to download.
Good clarification; I'll add it to the answer.
I've never heard of application/x-download, but I have heard of application/octet-stream.
From TFA: "[...] to a nonstandard value such as application/x-download. It's very important that this header is something unrecognized by browsers because browsers often try to do something special when they recognize the content type."
2

The only thing that comes to my mind is the document.execCommand("SaveAs") of Internet Explorer, you can open a window or use a hidden iframe with the url of your image, and then call it...

Check (with IE of course) this example I've done.

Comments

1

you can create a hidden file-input field and trigger() this one, when you click on your image:

$('.yourImageClass').click(function(){
 $('.hiddenInputClass').trigger('click');
})

2 Comments

I have looked all over for something simple. This is something I thought about but was unsure how to implement. Than ks @mheg
I have to take that back. This creates a file upload, Not as "save-as" download.
0

I don't imagine so - a lot of the basic browser functionality (eg: Print Preview) isn't available to Javascript.

Comments

0

Google Webstore
Github

I made an extension that does something like this, if anyone here is still interested. It uses an XMLHTTPRequest to grab the object, which in this case is presumed to be an image, then makes an ObjectURL to it, a link to that ObjectUrl, and clicks on the imaginary link.

In your case, you could just change ondragend to onclick and selectively add it to images.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.