我有一个我知道通常打开UA将下载的文件的网址(带有content-disposition: attachment
标题),但有时只会导致500
或其他错误页面。
目前,我通过在JavaScript中设置document.location
来触发下载。
我不想为此打开新的标签页或页面,但我也不希望我的用户最终只能在500页的情况下结束。
是否有解决我问题的方法?
例如,创建一个以下载网址为来源的不可见<iframe>
?我不想发明新的东西,但如果有人知道一个经过验证的解决方案,我很好奇。
答案 0 :(得分:0)
您可以在使用HTTP HEAD请求发送用户之前检查URL是否存在
function CheckFileExists(url)
{
var xmlhttp = new XMLHttpRequest();
xmlhttp.open('HEAD', url, false);
xmlhttp.send();
//You may have to invert this to return true if not 500 || 404, this is up to you
if(xmlhttp.status == 200)
{
return true;
}
else
{
alert('Sorry, that file does not exist');
return false;
}
}
您的超链接可以像这样写成
<a href="http://example.com/myfile.pdf" onclick="return CheckFileExists(this.href);">Download this file</a>
此方法的缺点是在点击和下载开始之间发生延迟。
如果您仍然要通过JavaScript重定向用户,可以根据CheckFileExists返回的值重定向。