Sto lavorando su un'attività, in cui devo scaricare un report in formato xlsx. Il file di report viene generato correttamente dal server e viene ricevuto anche dal lato client. Ma non si apre e produce errori di formato non validi.
Di seguito è riportato il codice del lato server.
Download di file Excel xlsx in Angularjs e WebApi
var output = await reportObj.GetExcelData(rParams);
if (output != null){
var result = new HttpResponseMessage(HttpStatusCode.OK)
{
Content = new ByteArrayContent(output.ConentBytes)
};
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = output.FileName
};
return result;
}
Ecco il codice per il lato client:
var saveData = function (response) {
if (response.status === 200) {
var reportData = response.data;
var b = new Blob([reportData], { type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" });
saveAs(b,"ReportFile.xlsx");//this is FileSaver.js function
} else {
console.log(response.statusText);
}
};
$scope.getExcelFile = function(reportName, reportParams) {
reportDataService.getExcelReportData(reportName, reportParams, saveData);
}
Di seguito si riporta il messaggio di errore:
Excel non ha potuto aprire newFile.xlsx perché alcuni contenuti è illeggibile. Vuoi aprire e riparare questa cartella di lavoro?
Quando si fa clic su Riparazione, viene visualizzato il seguente errore: Excel non può aprire questo file.
Il formato del file o l'estensione del file non è valido. Verificare che il file non sia stato danneggiato e che l'estensione del file corrisponda al formato del file.
Qualcuno può guidarmi cosa sto facendo male? Nel frattempo, gli stessi oggetti del generatore di file lato server funzionano senza problemi nell'applicazione di moduli ASP.Net e anche il file si apre senza errori.
Grazie.
qual è la configurazione '$ http'? per favore aggiungi la riga di richiesta. – hansmaad
config.headers.Authorization = "Bearer" + authData.token; Questo è solo a scopo di autorizzazione. –