데이터를 수집하고 csv 파일을 다운로드하는 '/ downloadUserAction'이라는 엔드 포인트가 있습니다. 내가 가지고있는 문제는 클릭 기능의 버튼을 사용하여 끝점을 호출 할 때 파일이 다운로드되지 않지만 브라우저에서 직접 끝점에 액세스 할 때만 다운로드된다는 것입니다.AJAX 요청시 응답으로 csv 파일 다운로드
연구 결과 저는 AJAX를 사용하여 파일을 다운로드 할 수 없다는 결론을 얻었습니다. 내 버튼을 클릭하면 엔드 포인트가 적중하고 파일 내용이 네트워크 탭에 전달되는 것을 볼 수 있기 때문에 의미가 있습니다. 그러나 클라이언트에는 파일이 다운로드되지 않습니다.
이것은 내 페이지에서 데이터 표 버튼 플러그인 기능을 사용하여 자바 스크립트 측에서 내 엔드 포인트를 호출하는 것입니다.
$(document).ready(function() {
var table = $("#userActivity").on('init.dt', function() {
}).DataTable({
dom: 'Blfrtip',
buttons: [
{
extend: 'csvHtml5',
text: 'NLP Search Download',
action: function (e, dt, node, config) {
$.ajax({
url : window.location + "/downloadUserAction?draw=3&search%5Bvalue%5D=NLP_SEARCH&order%5B0%5D%5Bcolumn%5D=6&order%5B0%5D%5Bdir%5D=desc"
});
}
}
],
내 끝점을 호출하여 클라이언트 페이지에서 강제로 다운로드 할 수있는 다른 방법이 있습니까?
side-note : 내 데이터 테이블이 서버 측 처리를 사용하고 있습니다. 그렇지 않으면 datatables CSV 내보내기 버튼을 사용했을 것입니다.
const saveData = (function() {
const a = document.createElement("a");
document.body.appendChild(a);
a.style = "display: none";
return function (data, fileName) {
const blob = new Blob([data], {type: "octet/stream"}),
url = window.URL.createObjectURL(blob);
a.href = url;
a.download = fileName;
a.click();
window.URL.revokeObjectURL(url);
};
}());
const data = 'a,b,c\n5,6,7',
fileName = "my-csv.csv";
saveData(data, fileName);
JSFiddle : 최신 브라우저에서