[英]Laravel 9 and Javascript: how to download a file returned from Storage::download()
[英]How to start browser file download from javascript, only if a web service returned correct content
我需要构建一个JavaScript,该JavaScript在点击<a>
元素时触发并调用对Web服务的GET调用(我也在对该服务进行编码)。 该服务应返回一个文件,并且只有在没有错误发生的情况下,才提供该文件供用户从浏览器下载,否则将其留在页面上,其他组件将在该页面上呈现错误。
我知道的方法是将<a>
元素的“ href”属性设置为服务的URL。
由于我要为此开发的应用程序的具体细节,我没有返回错误,而是包含“ errorOccurred”内容的html(它也可能是具有相同内容的文件)。
因此,我的问题是:仅当检索到的文件内容正常时,才如何从javascript方法(我正在使用jQuery.ajax)开始下载文件。我已将<a>
元素的onclick属性附加到文件中?
在这里找到解决方案
我正在复制粘贴此处给出的代码:
var textToSave = 'this is a test';
var hiddenElement = document.createElement('a');
hiddenElement.href = 'data:attachment/text,' + encodeURI(textToSave);
hiddenElement.target = '_blank';
hiddenElement.download = 'myFile.txt';
hiddenElement.click();
尝试在HTML文档中搜索“ errorOccurred ”文本。
使用“ indexOf”方法查看字符串是否存在于返回的HTML中。
if(returnedText.indexOf('errorOccurred') > -1) {...code to download file}
好。 您可以控制该服务,因此,当服务失败时,不要返回带有文本错误消息的html,而应返回400类型错误。
然后在您的jQuery.ajax中执行以下操作:
jQuery.ajax {
dataType:....
url:...
data:...
success:...
error: function(){
alert('Your error message');
}
}
如果在服务器端使用PHP,则可以使用以下命令生成400类型错误:
header('HTTP/1.1 404');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.