私のExcelファイルを作成するためにajax呼び出しで呼び出される以下のコードを使用しています。ダウンロードボタンをクリックすると、Excelのルートファイルが生成されます。しかし、ユーザーがファイルとして保存/保存するかどうかを確認することはできません。私は、Excelのコンテンツが来るブラウザのレスポンスタブを見ることができます。しかし、私は、名前を付けて保存ダイアログボックスオプションが来るようにしたい。この問題を解決できる以下のコードの修正はありますか?以下はExcelファイルをサーブレット経由でダウンロードする
final Date date = new Date();
final String generateDate= new SimpleDateFormat("yyyy-MM-dd").format(date);
final String filename = form_name+"-extraction-"+generateDate.toString()+".xls";
final FileOutputStream fileOutputStream = new FileOutputStream(filename);
workbook.write(fileOutputStream);
downloadFile(filename, response);
ダウンロードファイル方式である:
private void downloadFile(final String fileName, final SlingHttpServletResponse response){
try {
final File f = new File(fileName);
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "inline; filename="+fileName);
response.setHeader("Pragma", "public");
response.setHeader("Cache-Control", "no-store");
response.addHeader("Cache-Control", "max-age=0");
FileInputStream fin = null;
try {
fin = new FileInputStream(f);
} catch (final FileNotFoundException e) {
e.printStackTrace();
}
final int size = 1024;
try {
response.setContentLength(fin.available());
final byte[] buffer = new byte[size];
ServletOutputStream os = null;
os = response.getOutputStream();
int length = 0;
while ((length = fin.read(buffer)) != -1) {
os.write(buffer, 0, length);
}
fin.close();
os.flush();
os.close();
} catch (final IOException e) {
e.printStackTrace();
}
}catch (final Exception ex){
LOGGER.error("ERROR IS ::: {}",ex.getMessage());
}
また、Ajaxコールで問題が発生しました。 http://stackoverflow.com/questions/4814877/how-to-download-file-via-ajax-with-http-post-i-e-some-info-in-body。したがって、呼び出しを取得するために隠しフィールドを使用します。 –
@VivekDhiman実際には、ファイルをディスク[FileSaver.js](https://github.com/eligrey/FileSaver.js)に保存できるjavascriptライブラリがあります。大きなファイルで作業する場合は、[StreamSaver.js](https://github.com/jimmywarting/StreamSaver.js)を使用してください。 – Onur