Я использовал приведенный ниже метод для создания и загрузки CSV-файла из базы данных
String path= request.getServletContext().getRealPath("assets/file.csv");
try{
BufferedWriter bufferedWriter = Files.newBufferedWriter(Paths.get(path));
CSVPrinter csvPrinter = new CSVPrinter(bufferedWriter, CSVFormat.DEFAULT.withHeader("Name"));
for(String name: names){
csvPrinter.printRecord(name);
}
csvPrinter.flush();
csvPrinter.close();
jsonObject.addProperty("result", "succ");
}catch (Exception e) {
e.printStackTrace();
}
И я использую ajax для вызова этого метода. Мой jsp файл, где вызывается этот метод
<% String file= request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
+ request.getContextPath() + "/assets/file.csv";
%>
<button id="download" type="button">Download</button>
<a id="file" target="_blank" href="<%= file%>" style="display: none"></a>
<script type="text/javascript">
$(function(){
$('#download').on('click', function(){
$.ajax({
//ajax code
success: function(response){
console.log(response);
var resp = JSON.parse(response);
if(resp.result == "succ"){
document.getElementById("file").click();
}
},
error: function(xhr, err){
}
});
});
Но проблема в том, что когда я пытаюсь загрузить файл в первый раз, он возвращает страницу 404, а когда я снова запускаю, он возвращает последний сгенерированный файл.
После отладки я обнаружил, что файл генерируется поздно.