Ciao a tutti, ho il seguente problema:
Sto realizzando una web application per lavoro, una delle funzionalità offerte è quella di visualizzare o scaricare dei files(xml,xls).
Cliccando sull'apposito link viene chiamata una funzione js che riempie un campo hidden con un codice(che rappresenta il nome del file da aprire) ed effettua il submit del form. Il controller successivo prende il valore del campo hidden, tramite quest'ultimo effettua una query su un db e prende dei dati tra cui l'url completo del file.
Viene poi chiamata una funzione che tra le altre cose contiene queste righe di codice:
codice:
File file = new File(filePath);
FileInputStream fileInput = new FileInputStream(file);
response.setContentLength((int)file.length());
response.setContentType(FileUtility.getMimeType(file));
response.setHeader("Content-Disposition","attachment; filename="+file.getName());
ServletOutputStream out = response.getOutputStream();
BufferedOutputStream bufferOut = new BufferedOutputStream(out);
int b = 0;
byte[] bufferData = new byte[8192];
while ((b=fileInput.read(bufferData))!=-1) {
bufferOut.write(bufferData,0,b);
}
bufferOut.flush();
bufferOut.close();
out.close();
fileInput.close();
questo è invece il js che effettua la submit:
codice:
function openXls(value) {
with(document.frm1){
if (value!=null&&value!=''&&!submitted) {
updateFormStatus('resetHidden');
hdnXlsOutput.value=value;
target='_blank';
submit();
}
}
}
Ora la situazione è questa, sono obbligato a fare le cose in questo modo(fosse per me avrei aperto tutto direttamente tramite js ma non posso), facendo così il browser mi chiede se aprire o salvare il file, in entrambi i casi alcuni browser aprono o salvano il file ma lasciano una finestrella bianca aperta(dovuta appunto al targhet _blank), ho provato a mettere _self e risolvo il problema della finestra bianca ma poi nel browser mi apre il file nella stessa pagina
Avrei pensato di aprire i files in un popup:
codice:
function apri(url) {
newin = window.open(url,'titolo','scrollbars=yes,resizable=yes, width=600,height=600, menubar=no, status=no, location=no, toolbar=no');
}
tramite questa function funziona tutto ma c'è un piccolo problema, non ho l'url! almeno non nella jsp
quindi dovrei riuscire ad aprirlo da controller, è possibile????? tutti i suggerimenti sono ben accetti.