В моем приложении (разработанном на основе AngularJS) я должен создать и загрузить файл Excel на стороне клиента (язык Javascript).Для этого у меня есть этот код
var form = document.createElement('form');
form.action = 'download';
form.method = 'POST';
form.style.display = 'none';
var inputsrtoken = document.createElement('input');
inputsrtoken.style.setAttribute("width", "0");
inputsrtoken.style.setAttribute("diplay", "none");
inputsrtoken.style.setAttribute("visibility", "hidden");
inputsrtoken.type = 'text';
inputsrtoken.name = 'srtoken';
inputsrtoken.value = token;
var inputData = document.createElement('input');
inputData.style.setAttribute("width", "0");
inputData.style.setAttribute("diplay", "none");
inputData.style.setAttribute("visibility", "hidden");
inputData.type = 'text';
inputData.name = 'inputRicalcolo';
inputData.value = JSON.stringify(excelData);
var submit = document.createElement('input');
submit.type = 'submit';
submit.id = 'submitProject';
form.appendChild(inputsrtoken);
form.appendChild(inputData);
form.appendChild(submit);
document.body.appendChild(form);
$('#submitProject').click();
document.body.removeChild(form);
Где в переменную excelData
включена некоторая полезная информация для генерации файла Excel.
На стороне сервера, у меня есть этот код (всервлет загрузки)
if (Base64.isArrayByteBase64(excelin.getBytes("UTF-8"))) {
excelin = new String(Base64.decodeBase64(excelin.getBytes("UTF-8")), "UTF-8");
}
bpdf = createExcelRicalcolo(excelin);
String chiave = request.getParameter("chiave");
DateFormat formatter = new SimpleDateFormat("ddMMyyyy-HHmm");
String format = formatter.format(new Date());
String filename = "RICALCOLO_ONLINE_"+chiave +"_"+ format + ".xls";
byte[] b = bpdf;
if (b != null) {
int length = b.length;
ServletOutputStream op = resp.getOutputStream();
resp.setContentType("application/ms-excel");
resp.setContentLength(length);
resp.setHeader("Content-Disposition", "attachment; filename=" + filename);
resp.setHeader("Expires", "0");
resp.setHeader("Cache-Control", "must-revalidate, post-check=0, pre-check=0");
resp.setHeader("Pragma", "public");
op.write(b);
op.flush();
op.close();
}
Отлично работает!
Но теперь, это мой вопрос: можно ли сгенерировать файл, не скачивая его, а только сохранивэто (может быть, с сервисом в javascript) для последующего запроса на загрузку?
На самом деле, моя цель заключается в следующем: я хотел бы создать файл Excel (а не показать пользователю), сохранить его в столбце DB2в виде CLOB и только затем (нажав, например, другую кнопку в приложении), пользователь может загрузить его.
Верите ли вы, что это можно сделать, не нарушая логику кода?
Сохранение файла в виде CLOB будет следующей проблемой, которая будет создана.
Благодать любому, кто попытается мне помочь.