#javascript #jquery #ajax #asp.net-core
#javascript #jquery #ajax #asp.net-core
Вопрос:
Здравствуйте, у меня возникли проблемы с загрузкой файла из ASP.NET Основная страница Razor с использованием AJAX Post. То, что я хочу сделать, кажется повторяющимся простым, но оказалось настоящей болью.
-
Я не хочу хранить файл на сервере, но я в порядке с временными данными и идентификатором guid, если это необходимо.
-
Я хочу сделать ajax post, потому что я отправляю данные от клиента для сборки файла.
-
Данные, отправленные на сервер, будут зашифрованы в строку, и это будет содержимое файла. (Примечание: шифрование уже работает)
-
Я хочу, чтобы файл загружался как мое собственное расширение *.dat.
Вот мой asp.net метод core razor post.
public IActionResult OnPostDownloadEncryptedFile([FromBody] List<FileData> fileData)
{
var response = ...THIS IS A REST WEB API CALL ASYNC I am calling .Result
var byteArray = Encoding.ASCII.GetBytes(response.EncryptedData);
var stream = new MemoryStream(byteArray);
return this.File(stream, System.Net.Mime.MediaTypeNames.Application.Octet, "myfile.dat");
}
Вот мой почтовый код Ajax:
$.ajax({
type: "POST",
url: "/MySite/MyPage?handler=DownloadEncryptedFile",
beforeSend: function (xhr) {
xhr.setRequestHeader("XSRF-TOKEN", $('input:hidden[name="__RequestVerificationToken"]').val());
},
data: JSON.stringify(myData),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
},
error: function (response) {
alert(response);
}
});
Я понимаю, что сообщение ajax, скорее всего, неполное и неправильное, не совсем уверен, как исправить, я видел, как другие использовали window.местоположение, но я не уверен, как это работает. Поскольку при отладке я никогда не мог попасть в функцию ajax post success.
Любая помощь будет высоко оценена.
Ответ №1:
У меня получилось, но я чувствую, что это ужасная реализация.
Вот что я сделал:
public IActionResult OnPostEncryptFileData([FromBody] List<FileDataItem> fileData)
{
var response = this.restEndpoint.EncryptFileData(
new FileDataEncryptionRequest()
{
FileDataListItems = new FileDataList() { FileDataItems = fileData.ToList() }
}).Result;
return new JsonResult(response.EncryptedData);
}
public FileResult OnGetDownloadEncryptedFile(string data)
{
var byteArray = Encoding.ASCII.GetBytes(data);
return this.File(byteArray, "text/plain", "test.dat");
}
Сообщение Ajax:
$.ajax({
type: "POST",
url: "/MySite/MyPage?handler=EncryptFileData",
beforeSend: function (xhr) { xhr.setRequestHeader("XSRF-TOKEN", $('input:hidden[name="__RequestVerificationToken"]').val()); },
data: JSON.stringify(fileData),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
alert(response);
window.location = "/MySite/MyPage?handler=DownloadEncryptedFileamp;data=" response;
},
failure: function (response) {
alert(response);
}
});
Хотелось бы услышать несколько лучших решений.