Member 14803832 Ответов: 1

Как загрузить файл из БД с помощью ajax вызова MVC


Я пытаюсь реализовать функциональность загрузки файлов через ajax-вызов в MVC. После вызова метода контроллера у меня всегда есть "parseerror", может ли кто-нибудь объяснить мне, почему?

с простой ссылкой для скачивания в razor это работает, но не с ajax. Что я здесь делаю не так?

Что я уже пробовал:

my ajax:

tab.on("click", ".FileDownload", function (e) {

               //$('#uploadStatus').html("ok");
                 var tr = $(this).closest("tr");
                 var id = tr.data("id");

               $.ajax({
                      type: "POST",
                      url: "/File/FileDownload",
                      //contentType: false,
                      //processData: false,
                      //dataType: "json",
                      data: { fileId: id },
                      success: function (data) {
                      $('#uploadStatus').html("ok");
                      },
                       error: function (err) {
                                  alert(err.statusText);
                                              }
         });

     });



and controller:


     [HttpPost]
      public FileResult FileDownload(int? fileId)
      {
       FileDBEntities db = new FileDBEntities();
       tblFile file = db.tblFiles.ToList().Find(p => p.id == fileId.Value);
       return File(file.Data, file.ContentType, file.Name);
      }

F-ES Sitecore

Как вы уже выяснили, вы не можете загружать файлы с помощью ajax. При использовании ajax все происходит в javascript, и js не имеет доступа на запись к вашему жесткому диску, поэтому, хотя он может обработать запрос, он не может сделать ничего значимого с результатами. Чтобы сохранить файл, вам нужно, чтобы загрузчик файлов браузера включился, и это произойдет только тогда, когда браузер сделает запрос, который имеет загрузку в качестве ответа, вы не можете инициировать этот процесс через js.

1 Ответов

Рейтинг:
9

Member 14803832

tab.on("click", ".FileDownload", function (e) {

    //$('#uploadStatus').html("ok");
    var tr = $(this).closest("tr");
    var id = tr.data("id");

    window.location = window.location.origin + '/File/FileDownload?fileId=' + id;

});

[HttpGet]
    public FileResult FileDownload(int? fileId)


решено!