VegetaSSJ5
07-12-2011, 20:05
Salve a tutti!
Ho una servlet che si occupa di gestire le richieste AJAX. Il problema č che non riesco a implementare la funzione di download di un file via AJAX. Sulla pagina web ho un pulsante con la funzione javascript download registrata per l'evento onclick:function ajaxRequest(method, parameters) {
var XMLHttpReq;
try {
XMLHttpReq = new XMLHttpRequest();
} catch (e) {
try {XMLHttpReq = new ActiveXObject("Msxml2.XMLHTTP.6.0");} catch(e) {}
try {XMLHttpReq = new ActiveXObject("Msxml2.XMLHTTP.3.0");} catch(e) {}
try {XMLHttpReq = new ActiveXObject("Msxml2.XMLHTTP");} catch(e) {}
try {XMLHttpReq = new ActiveXObject("Microsoft.XMLHTTP");}
catch(e) {return "!!AJAXERROR!!Impossibile creare una richiesta AJAX.";}
}
var strRequestParams = "";
if (isArray(parameters)) {
for (var i = 0; i < parameters.length; i++) {
strRequestParams = strRequestParams + "&" + parameters[i];
}
} else if (isHash(parameters)) {
var keys = parameters.getKeys();
for (var i = 0; i < keys.length; i++) {
strRequestParams = strRequestParams + "&" + keys[i] + "=" + parameters[i];
}
} else {
strRequestParams = parameters;
}
XMLHttpReq.open("post", getBaseURL()+"ajaxrequest.do", false);
XMLHttpReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
XMLHttpReq.send("method="+method+strRequestParams);
return XMLHttpReq.responseText;
}
function downloadFile(idDocumento) {
var ajaxResponse = ajaxRequest("downloadFile", new Array("idDocumento="+idDocumento));
alert(ajaxResponse);
}
Tale funzione richiama la servlet che esegue il metodo seguente:private void downloadFile() {
try {
long idDocumento = Long.parseLong(request.getParameter("idDocumento"));
GeScuolaOperations gso = GeScuolaServiceFactory.getInstance().getGeScuolaService();
Documento doc = gso.getDocDetails(new Documento(idDocumento));
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=\"" + doc.getNome() + "\"");
response.setIntHeader("Content-Length", doc.getContenuto().length);
response.getOutputStream().write(doc.getContenuto());
} catch (Throwable t) {
sendErrorResponse(t);
}
return;
}
Sul client ricevo nell'alert il contenuto del file, perņ non mi appare la finestra per salvare il file.
Sapete dirmi come posso realizzare questa cosa?
Grazie!
Ho una servlet che si occupa di gestire le richieste AJAX. Il problema č che non riesco a implementare la funzione di download di un file via AJAX. Sulla pagina web ho un pulsante con la funzione javascript download registrata per l'evento onclick:function ajaxRequest(method, parameters) {
var XMLHttpReq;
try {
XMLHttpReq = new XMLHttpRequest();
} catch (e) {
try {XMLHttpReq = new ActiveXObject("Msxml2.XMLHTTP.6.0");} catch(e) {}
try {XMLHttpReq = new ActiveXObject("Msxml2.XMLHTTP.3.0");} catch(e) {}
try {XMLHttpReq = new ActiveXObject("Msxml2.XMLHTTP");} catch(e) {}
try {XMLHttpReq = new ActiveXObject("Microsoft.XMLHTTP");}
catch(e) {return "!!AJAXERROR!!Impossibile creare una richiesta AJAX.";}
}
var strRequestParams = "";
if (isArray(parameters)) {
for (var i = 0; i < parameters.length; i++) {
strRequestParams = strRequestParams + "&" + parameters[i];
}
} else if (isHash(parameters)) {
var keys = parameters.getKeys();
for (var i = 0; i < keys.length; i++) {
strRequestParams = strRequestParams + "&" + keys[i] + "=" + parameters[i];
}
} else {
strRequestParams = parameters;
}
XMLHttpReq.open("post", getBaseURL()+"ajaxrequest.do", false);
XMLHttpReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
XMLHttpReq.send("method="+method+strRequestParams);
return XMLHttpReq.responseText;
}
function downloadFile(idDocumento) {
var ajaxResponse = ajaxRequest("downloadFile", new Array("idDocumento="+idDocumento));
alert(ajaxResponse);
}
Tale funzione richiama la servlet che esegue il metodo seguente:private void downloadFile() {
try {
long idDocumento = Long.parseLong(request.getParameter("idDocumento"));
GeScuolaOperations gso = GeScuolaServiceFactory.getInstance().getGeScuolaService();
Documento doc = gso.getDocDetails(new Documento(idDocumento));
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename=\"" + doc.getNome() + "\"");
response.setIntHeader("Content-Length", doc.getContenuto().length);
response.getOutputStream().write(doc.getContenuto());
} catch (Throwable t) {
sendErrorResponse(t);
}
return;
}
Sul client ricevo nell'alert il contenuto del file, perņ non mi appare la finestra per salvare il file.
Sapete dirmi come posso realizzare questa cosa?
Grazie!