我有一个URL,我需要下载的图像在其中。 我想要一个按钮来下载它。 我尝试了这两个选项:
const a = document.createElement('a');
a.href = ImageURL;
a.download = title;
document.body.appendChild(a);
a.click();
和
window.location.href = t;
但是这两个选项都只是打开带有图像的新窗口。
有没有一种方法可以代替下载新文件的新窗口?
答案 0 :(得分:0)
这不是一个尖锐的问题。在以下情况下,您只能使用download
属性来强制下载图像/文件:
这是跨源href的问题。
答案 1 :(得分:0)
例如,您可以尝试在download
中添加HTML
属性
<a href="IMAGE_URL" download="imagename.png">
但是据我所知,新浏览器中存在一些限制。
答案 2 :(得分:0)
这是使用javascript的实现,需要使用IE,Firefox和Chrome从URL下载图像。小型黑客有必要使用httpclient获取作为Blob的图像,然后在DOM中创建一个元素,并模拟该元素的单击以强制浏览器下载图像。
HTML:
<img src="IMAGE_URL" #img>
<a href="javascript:void(0);" (click)="downloadImage(img)">Download</a>
打字稿:
constructor(private httpClient: HttpClient) {
}
downloadImage(img) {
const imgUrl = img.src;
const imgName = imgUrl.substr(imgUrl.lastIndexOf('/') + 1);
this.httpClient.get(imgUrl, {responseType: 'blob' as 'json'})
.subscribe((res: any) => {
const file = new Blob([res], {type: res.type});
// IE
if (window.navigator && window.navigator.msSaveOrOpenBlob) {
window.navigator.msSaveOrOpenBlob(file);
return;
}
const blob = window.URL.createObjectURL(file);
const link = document.createElement('a');
link.href = blob;
link.download = imgName;
// Version link.click() to work at firefox
link.dispatchEvent(new MouseEvent('click', {
bubbles: true,
cancelable: true,
view: window
}));
setTimeout(() => { // firefox
window.URL.revokeObjectURL(blob);
link.remove();
}, 100);
});
}