Я создал файл Excel в приложении C #, используя OpenXML.Впоследствии я прочитал его в тип MemoryStream.Теперь я хочу вернуть этот файл для загрузки из функций C #, которые возвращают тип ActionResult.Данные возвращаются в функцию ajax, где я ожидаю приглашения пользователя на загрузку, чтобы они могли сохранить этот файл, если захотят.Ниже приведен пример кода и вещи, которые я попробовал.
Моя цель с MemoryStream состояла в том, чтобы мне не нужно было хранить вышеупомянутый физический файл на сервере.Есть ли способ вернуть содержимое MemoryStream в функцию Ajax для загрузки?
Я не хочу использовать пробную версию 3, где я отправил путь к файлу функции ajax, где он использует его для перенаправления.Это, однако, работает, и я получаю сообщение для загрузки из веб-браузера IE.Но ничего не происходит для пробной версии 1 или пробной версии 2, за исключением, возможно, ошибки.
Это потому, что мне нужен физический файл на сервере для его загрузки.Не уверен, что Ajax-коду нужно что-то еще для Trial 1 или Trial 2 для работы.
Любые советы о том, как я должен делать это правильно, были бы очень полезны.Спасибо
public ActionResult createFile ()
{
...
// Reads a file into memory stream. Common for all trials below
memoryStream = ReadDataIntoMemoryStream();
// TRIAL 1
FileStream fs= new FileStream();
memoryStream.CopyTo(fs);
string mimeType = "application/vnd.openxmlformats-
officedocument.spreadsheetml.sheet";
return File(fs, mimeType);
// TRIAL 2
string mimeType = "application/vnd.openxmlformats-
officedocument.spreadsheetml.sheet";
byte[] fileBytes = memoryStream.ToArray();
return File(fileBytes, mimeType);
// TRIAL 3
string filepath = "..\...\..\filename.xlsx"; // actual physical file on
// the server
return Content(filepath);
}
Ajax
$(document).ready(function () {
$('#777').on('click', function () {
$.ajax({
method: "GET",
url: "Report/createFile",
contentType: "application/download", // not needed for Trial 3
// where string is returned
dataType:"text",
success: function (data) {
// window.location.href = data; // THIS WORKS with TRIAL 3
// where filepath is returned
},
error: function (data) {
alert("Error.");
},
});
});
});