Получите заархивированный файл от.NET MVC Controller и разархивируйте его в javascript
Я пытаюсь получить zip-файл (или массив байтов вместо) из контроллера действий и разархивировать его в javascript. Цель состоит в том, чтобы сэкономить время, потому что размер данных, которые я хочу загрузить, действительно велик.
Это контроллер действия, который возвращает данные:
public FileContentResult GetKML()
{
byte[] strResult = GetZippedDataWithDotNetZip();
return File(strResult, "application/zip", "test.zip");
}
И я называю это действие контроллера в JavaScript:
$.post('Home/GetKML', {}, function (data) {
var info = unzip(data);
});
Проблема в том, что действие контроллера возвращает неопределенное значение. Зачем?
1 ответ
Вероятно, проблема связана с тем, что функции jjery ajax обрабатывают только типы ответов xml, html, script, json, jsonp и text (я не проверял это, но это основано на моем предыдущем опыте работы с ним). Вы возвращаете двоичные данные из ваших действий, которые они не могут обработать.
Я сильно сомневаюсь, что действие контроллера возвращает "неопределенный", так как это идиома JavaScript. Вероятно, вы просто пытаетесь сделать console.log возвращаемого значения и видите "неопределенное", и в этом случае вы смотрите на конечный результат неудачной попытки jquery обработать вывод Action. Вы получите более подробную информацию об устранении неполадок, если будете использовать Firefox и Firebug для просмотра фактического ответа на запрос ajax.
Это отвечает "почему?" в твоем вопросе я верю.
Если вам нужны какие-то дополнительные параметры, и я думаю, что вам нужны именно эти ответы, так как вы очень заинтересованы в производительности и не заинтересованы в использовании уже поддерживаемой инфраструктуры, доступной для прозрачного включения именно того повышения производительности, которое вы Если вы хотите сделать это (например, сжатие gzip), вы можете использовать свой собственный плагин jquery, который обрабатывает двоичные данные, возвращаемые с сервера, и делает все, что вы захотите. Ваше желание самореализуемых улучшений производительности заставляет меня подозревать, что вы захотите и сможете покопаться в документации jquery для достижения этой цели. Или, если это не помогло, почему бы не реализовать функцию jquery по-своему, чтобы поддержать извлечение zip-данных?
Другой вариант - отправить обратно заархивированный файл в виде строки в формате MIME, что, конечно, сведет на нет полезность заархивированного файла. Но, опять же, вы можете включить сжатие gzip, и оно все равно будет сжато.