Скачать файл с ajax в C # .net MVC - PullRequest
0 голосов
/ 21 февраля 2019

Я попытался использовать следующий код для загрузки файла с ajax в C # .net MVC.По какой-то причине там не работает.Кто-нибудь знает, почему?

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

Javascript:

function downloadFile(even) {
    $.ajax({
        url: "/Home/Download",
        type: "POST",
        data: {
            fileName: even.id
        },
        success: function (returnValue) {
            window.location = returnValue;
        },
        error: function (data) {

        }
    });
}

C # скрипт:

[Authorize]
[HttpPost]
public virtual FileResult Download(string fileName)
{
    var file = (fileName.Contains("hl7s") == true ? fileName + ".zip" : fileName + ".txt");
    byte[] fileBytes = System.IO.File.ReadAllBytes(@"c:\temp\"+ file);
    return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, fileName);
}

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Просто используйте атрибут загрузки HTML для загрузки файла

<a href="you file location" download></a>

Для получения дополнительной информации см. эту ссылку

0 голосов
/ 21 февраля 2019

Это не так просто сделать, но есть сценарий, который может вам помочь.Я обычно использую FileSaver.js , чтобы сделать это, это с открытым исходным кодом.FileSaver помогает решить проблемы несовместимости браузера, он также хорошо протестирован.

Вот фрагмент кода, который я поднял из своего текущего проекта.Это простой javascript и не требует jQuery или чего-либо еще.

В этом примере имя файла жестко закодировано как «my_excel_file.xlsx», но вы можете получить имя файла из API, если вы выставите правильный заголовок изапи.Я думаю, что я ответил, как справиться с этим где-то в SO.

<html>
  <head>
  <script src="FileSaver.min.js"></script>
  <script>        
    function download() {            
        var xhr = new XMLHttpRequest();
        xhr.open("GET", "http://your.url", true);
        xhr.setRequestHeader("Content-type","application/json");
        xhr.setRequestHeader("Access-Control-Allow-Origin", "*");
        xhr.setRequestHeader("Accept", "application/octet-stream");
        //xhr.setRequestHeader("Authorization", "Bearer ......");
        xhr.onreadystatechange = function() {
            if (xhr.readyState == 4 && xhr.status == 200) {
                var blob = new Blob([xhr.response], {type: "octet/stream"});
                var fileName = "my_excel_file.xlsx";
                saveAs(blob, fileName);
            }
        }
        xhr.responseType = "arraybuffer";
        xhr.send();
    }        
  </script>
</head>
<body>
  <button onclick="javascript:download()">Download Excel File</button>
</body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...