我对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);
}
});
}
标头的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();
一切正常但文件在默认浏览器文件夹中下载。 :(
答案 0 :(得分:0)
浏览器确定了这一点。如果他们的浏览器让他们保存在任何地方,它会给他们一个对话如果他们的浏览器没有(通常在移动设备上),则会保存在默认位置。你无能为力。
如果您在像Firefox这样的现代浏览器上进行测试,请转到您的设置。常规选项卡下的Firefox设置有两个选项“始终询问保存文件的位置”和“将文件保存到...”某些特定文件夹。用户可以从他们的浏览器设置而不是每个控制它的网站来控制它,这就是浏览器决定的原因。