홈>
excel.xlsx를 생성하고 FileContentResult에 반환하는 ASP MVC5 API가 있습니다. 파일을 서버 디스크에 저장할 수 없으므로 메모리에 모두 있습니다. URL에 직접 액세스하면 정상적으로 작동합니다.
거대한 Json을 API에 전달하고 생성 된 .xlsx 파일을 받아야하는 AngularJS 애플리케이션이 있습니다.
다음을 시도하고 있습니다 :
컨트롤러 :
public async Task<FileContentResult> Excel([FromBody]GetGeneralFilterVM operationHistoryFilter = null)
{
var ListaOperazioni = await GetListaOperazioniData(operationHistoryFilter);
var Totals = await GetExcelTotalsData(operationHistoryFilter);
var excelExport = new ExcelExportEntity(new object[]
{
ListaOperazioni,
Totals,
});
var preFile = excelExport.DoExcel();
var arraybits = preFile;
var file = File(arraybits, "application/vnd.ms-excel", "OperationHistory.xlsx");
return file;
}
각도 :
$scope.exportExcel = () => {
$.ajax({
cache: false,
url: appPath + "controller/Excel",
data: filter,
success: function (response) {
var file = new Blob([response], { type: "application/vnd.ms-excel" });
var fileName = "excelFeliz.xlsx";
saveAs(file, fileName);
},
error: function (ajaxContext) {
alert('Export error: ' + ajaxContext.responseText);
}
});
}
파일도 다운로드 할 수 있지만 열려고하면 파일이 손상됩니다.
AJAX에 대한 나의 주장은 컨트롤러에 들어가는 GetGeneralFilterVM 때문에 많은 속성을 가진 하위 객체를 포함하고 있으며 URL에 매개 변수로 사용하기가 매우 복잡합니다.
파일을 서버 디스크에 저장할 수 없기 때문에 다운로드 할 URL을 생성하고 반환 할 방법이 없습니다.
아무 생각 없나요?
- 답변 # 1
- 답변 # 2
많은 검색 끝에 방법을 찾았습니다. 하나는 100 % 작동합니다 .Blob에 문제가있는 것으로 보이는 AJAX를 사용하는 대신 XMLHttpRequest 호출을 사용했습니다. 참고 : 컨트롤러는 변경되지 않았습니다.
getExportExcel: function (filter) { var json_upload = "operationHistoryFilter=" + JSON.stringify(filter); var url = appPath + "OperationHistoryReport/ExcelGeneral"; var fileName = "excel.xlsx" var request = new XMLHttpRequest(); request.open('POST', url, true); request.setRequestHeader('Content-Type', 'application/json'); request.responseType = 'blob'; request.onload = function (e) { if (this.status === 200) { var blob = this.response; if (window.navigator.msSaveOrOpenBlob) { window.navigator.msSaveBlob(blob, fileName); } else { var downloadLink = window.document.createElement('a'); var contentTypeHeader = request.getResponseHeader("Content-Type"); downloadLink.href = window.URL.createObjectURL(new Blob([blob], { type: contentTypeHeader })); downloadLink.download = fileName; document.body.appendChild(downloadLink); downloadLink.click(); document.body.removeChild(downloadLink); } } }; request.send(JSON.stringify(filter)); }
관련 자료
- html 파일을 가져오고 매개 변수를 html 파일로 전달하는 Javascript/Nodejs
- ms access - 공백 또는 하이픈이 포함 된 SQL 매개 변수 전달
- reactjs - 반응 링크를 통해 매개 변수를 전달할 때 약간의 문제가 발생했습니다
- scala - 구문 적으로 일관된 방식으로 n 개의 n 개의 매개 변수에 인수를 전달
- android - Firebase 저장소 참조를 전달하여 이미지 다운로드 URL 받기
- javascript - Jest 테스트가 매개 변수를 통과하지 않습니다
- powershell - 제공된 매개 변수 만 전달
- javascript - onclick을 사용하여 여러 매개 변수를 전달하여 기능
- php - 정의되지 않은 변수 (전달 매개 변수)
- groovy - 작성된 작업에 다른 매개 변수 전달
- python 3.x - 맞춤형 변압기에 파라미터 전달
- c# - 컨트롤러 (ViewModel)로 전달되지 않는 두 번째 매개 변수
- asp.net core mvc - WebApi에 여러 Get 매개 변수 전달
- java - 사용자 정의 조건에 매개 변수 전달
- AWS Lambda에서 Glue 작업으로 파라미터 전달
- c# - MVC Core에서 인덱스 목록 컨트롤러에 매개 변수 전달
- 매개 변수의 char 배열 배열 (문자열 배열 배열)의 포인터를 C의 함수에 전달하고 함수 호출
- python 3.x - tkinterafter를 사용하여 매개 변수를 콜백에 전달
- 페이지를 새로 고치면 angularjs의 두 컨트롤러 간 데이터 전달이 지워집니다
- .net - 여러 매개 변수를 "매개 변수"로 전달하지만 C #에서 참조하는 방법
관련 질문
- javascript : JS 파일에 자바스크립트 포함
- Ajax에서 C# code 비하인드로 사전 전달
- asp.net : 민감한 정보가 제3자 웹사이트에 공개될 수 있으므로 이 요청이 차단되었습니다.
- asp.net : Ajax 완료를 기다리는 서버 측 호출 -ASP Webform
- Ajax 파일 업로드 제어, Asp.net(VB)에서 파일 정보를 어떻게 변경합니까?
- ASP.NET WebAPI2 및 AngularJS
- c# : ASP.net에서 Jquery/Ajax 자동 완성 텍스트 상자가 작동하지 않음
- c# : 페이지를 새로 고치거나 다른 페이지로 이동한 후 setTimeout() 유지
마임 유형을 ""application/vnd.ms-excel "대신"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet "로 변경