因此,我编写了一个Java servlet从服务器获取一个zip文件,当我使用Web浏览器对其进行测试时,该文件运行良好。
我的URL如下所示:
https://myserver.com/Download/FileServlet?filename=users_files_3a2f51a4-9381-11e9-bc42-526af7764f64.zip&user=TAN
这将成功下载文件。
我将动态传递文件名的UUID
部分(将从数据库表(最顶部)记录中获取)和user
变量,但是暂时并进行测试,我已经硬编码了这些变量。
我想知道当用户单击按钮时如何调用上述URL。我当前的设置(没有任何URL)如下。
我在HTML代码中按下了按钮,如下所示:
<button id="fileButton" onclick="checkFile()">Download Files</button>
<script>
function checkFile(){
}
</script>
是否遵循正确的方法?
<button id="fileButton" onclick="checkFile(); location.href= https://myserver.com/Download/FileServlet?filename=users_files_3a2f51a4-9381-11e9-bc42-526af7764f64.zip&user=TAN ">Download Files</button>
因此,即使上述方法是正确的,一旦用户点击下载按钮,文件很可能也无法下载。
我可能不得不一次又一次地运行上面的URL(如果我将URL与按钮单击绑定在一起,在这种情况下可能无法实现),也许使用javascript的setInterval()
方法在函数内部做
答案 0 :(得分:0)
如果要以编程方式调用/打开URL,可以尝试以下操作:
<script type="text/javascript">
function populate(s1,s2) {
var s1 = document.getElementByID(slct1);
var s2 = document.getElementByID(slct2);
s2.innerHTML = "";
if(s1.value == "Email"){
var optionArray = ["Cannot Login|Cannot Login", "Cannot Sent Email|Cannot Sent Email"];
}
for(var option in optionArray){
var pair = optionArray[option].split("|");
var newOption = document.createElement("option");
newOption.value = pair[0];
newOption.innerHTML = pair [1];
s2.options.add(newOption);
}
}
</script>
</head>
<select id="slct1" name="slct1" onchange="populate('slct1','slct2')">
<option value=""></option>
<option value="Email">Email</option>
<option value="Print">Print</option>
<option value="Internet">Internet</option>
</select>
<hr />
Select your issue:
<select id="slct2" name="slct2"></select>
将在新标签页中打开一个网址。
答案 1 :(得分:-1)
为@DonJoe的答案添加一些见解 如果文件已准备就绪,则对下载位置的ajax调用将给响应头200,然后方便下载。也许您下载了两次。
var url = 'https://myserver.com/Download/FileServlet?filename=users_files_3a2f51a4-9381-11e9-bc42-526af7764f64.zip&user=TAN'
function checkFile(){
$.ajax({
url: url,
success: function (data) {
window.open(url,'_blank');
#or window.location.href = url
},
error: function () {
setTimeout(3000, checkFile)
}
});
}
或可能制作一个iframe
<iframe class='downloader' />
#js
var url = 'http://myserver.com/...'
checkFile = function() {
$('.downloader').attr('src', url)
setTimeout(3000, checkDownload)
}
var checkDownload = function() {
if($('.downloader')[0].innerHTML.indexOf('400') > 0)
checkFile()
}
这将重复检查iframe内容,假设文件未准备好下载时出现400响应。