使用 Javascript 强制下载图像
我想知道是否有任何方法可以使用 Javascript/jQuery 制作脚本来下载(打开下载对话框)图像,这样浏览器就不会只显示它。
I want to know if there is any way to make a script using Javascript/jQuery to download (open a download dialog) a image so the browser won't just show it.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
为此,您需要使用服务器端脚本。 在 stackoverflow 上搜索。
或者,您的服务器可能允许您通过配置动态更改标头。
Apache 解决方案与 mod_headers
将可下载的图像放在一个目录中。在此目录中,创建一个包含以下内容的
.htaccess
文件:测试请求:
测试响应:
HTML5 解决方案
您可以 在锚点上使用 HTML5
download
属性:You need to use server-side scripting for this. Search on stackoverflow.
Alternately, your server might allow you to alter headers dynamically via configuration.
Apache solution with mod_headers
Place your downloadable images in a directory. Inside this directory, create a
.htaccess
file with the following contents:Test Request:
Test Response:
HTML5 Solution
You can use the HTML5
download
attribute on anchors:我想出了纯 JavaScript 的方法来强制下载图像,但有以下限制:
上述限制(尤其是第三个)或多或少使这个毫无用处,但“核心”想法正在发挥作用,希望在将来的某个时候可以确定文件名,然后它将变得更加有用。
代码如下:
如您所见,技巧是将图像绘制到canvas对象中,获取图像的原始二进制数据,然后使用image/octet-stream强制下载code> mime 类型并更改浏览器位置。
使用示例也如下。
HTML:
JavaScript:
这允许通过将按钮的
rel
属性分配给图像 ID,将下载按钮“附加”到每个现有图像 - 代码将完成其余工作并附加实际的点击事件。由于同源政策无法在 jsFiddle 上发布实时示例 - 他们正在使用“沙箱”域来执行脚本。
I have come up with pure JavaScript way to force download of image, with the following restrictions:
The above restrictions (especially the third) more or less renders this useless but still, the "core" idea is working and hopefully at some point in the future it will be possible to determine file name then it will become much more useful.
Here is the code:
As you can see, the trick is drawing the image into
canvas
object, get the raw binary data of the image then force download by usingimage/octet-stream
mime type and changing the browser location.Usage sample follows as well.
HTML:
JavaScript:
This allows to "attach" download button to every existing image by assigning the
rel
attribute of the button to the image ID - the code will do the rest and attach the actual click events.Due to the same origin policy can't post live example at jsFiddle - they're using "sandbox" domain to execute the scripts.
这是一个使用 HTML5“下载”属性的简单解决方案:
If it can find the picture it will download a cat picture.
Here's a simple solution that uses the HTML5 'download' attribute:
If it can find the picture it will download a cat picture.
这是完全有可能的。只需将图像编码为 Base64,然后使用
data:image/jpg,Base64,...
样式的 url 执行window.open
即可。This is totally possible. Just encode the image as Base64 then do a
window.open
with adata:image/jpg,Base64,...
-style url.