我对 java servlet 进行 ajax 调用,以便在客户端上下载 xml 文件。我使用此代码在“成功”ajax 调用上附加一个表单,并强制触发有效的开始文件下载。
我的问题是,我想允许客户端用户选择保存文件的位置,而不是将其下载到默认浏览器文件夹中。
我可以这样做吗?
我的客户端代码是:
function downloadAnnotationXML()
{
downloadAnnotation=true;
var temp=new Object();
temp.topic=topic;
temp.operation=operation
temp.data=annotazioniXml;
var json = JSON.stringify(temp);
var url="<%=request.getContextPath()%>/DownloadAnnotationServlet";
$.ajax({
type: "POST",
url: url,
data: {json:json},
success: function(response, status, request) {
var disp = request.getResponseHeader('Content-Disposition');
if (disp && disp.search('attachment') != -1) {
var form = $('<form id="ajax" method="POST" action="' + url + '">');
form.append($('<input type="hidden" name="json" value="json">'));
$('body').append(form);
form.submit();
}
},
error:function(jqXHR, textStatus, thrownError )
{
error = "Non è stato possibile caricare l'oggetto";
msg = textStatus + thrownError;
promptError(error+" <br /> "+ msg);
}
});
}
我的 header 的 java servlet 代码是:
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename="+file.getName());
OutputStream outStream = response.getOutputStream();
byte[] buffer = new byte[4096];
int bytesRead = -1;
while ((bytesRead = inStream.read(buffer)) != -1) {
outStream.write(buffer, 0, bytesRead);
}
inStream.close();
outStream.close();
一切正常,但文件下载到默认浏览器文件夹中。 :(
最佳答案
浏览器决定这一点。如果他们的浏览器允许他们在任何地方保存,就会给他们一个对话框。如果他们的浏览器不支持(通常在移动设备上),它会保存在默认位置。你对此无能为力。
如果您在 Firefox 等现代浏览器上测试此功能,请转到您的设置。 Firefox 的常规选项卡下的设置有两个选项“始终询问保存文件的位置”和“将文件保存到...”某个特定文件夹。用户从浏览器设置中控制这一点是正确的,而不是由每个网站控制它,这就是为什么这是由浏览器决定的原因。
关于java - Java 中文件下载的文件夹浏览对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28809492/