Сохранение данных (октетный поток) из запроса в виде файла Excel приводит к повреждению файла

Я возвращаю файл Excel (который отлично работает) в виде потока октетов из C# API, используя FileContentResult(byte[], MediaTypeNames.Application.Octet, "file.xlsx"

а затем я хочу открыть приглашение для загрузки файла из js, и все работает нормально, за исключением того, что файл поврежден

Я пробовал различные решения из этих сообщений, и файл Excel всегда приводил к повреждению.

JavaScript: создать и сохранить файл

Имя файла большого двоичного объекта JavaScript без ссылки

Создать бинарный блоб в JS

а также FileSaver.js

$.ajax({
url: url,
type: 'POST',
data: formData,
processData: false,
contentType: 'application/json',
success: function (result) 
{
    saveFile(result);
}
});

Я знаю, что этот файл работает нормально, потому что когда я тестирую его через Swagger, он работает нормально.

Есть идеи?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
2 588
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Обходной путь:

Возвращение base64 этого файла и создание элемента a на этой странице с атрибутом href, который имеет значение

data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64,

а затем добавьте свой base64 к этому значению, так что

'data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64,'+base64

а затем выполните .click() по этой ссылке

Преобразование Base64, закодированного в XSLX

Вы можете указать имя файла, используя атрибут download = ""

Что сработало для меня, так это добавить responseType: 'arraybuffer' к ajax:

$.ajax({
  url: url,
  type: 'POST',
  data: formData,
  contentType: false,
  processData: false,
  xhrFields: {
    responseType: 'arraybuffer'
  },
  success: function (data) {
    const blob = new Blob([data]);
    saveAs(blob, "output.xlsx");
  }
});

Другие вопросы по теме