Нет ответа от кнопки загрузки - PullRequest
0 голосов
/ 22 апреля 2020

У меня нет ответа в браузере, хотя в моем коде нет ошибок, и я понятия не имею, что пошло не так.

Код достигает return File(memoryStream, contentType, "test" + extension); без ошибок, но я не получаю ответ от браузера.

[HttpPost]
public ActionResult DownloadAttachment(eNotice.attachment attachment)
{
    try
    {
        var attachmentToDownload = db.Tbl_ENoticeAttachements.Where(a => a.ENID == attachment.ENID && a.IsDeleted == false && string.Compare(a.FileName, attachment.FileName, StringComparison.OrdinalIgnoreCase) == 0).FirstOrDefault();
        if (System.IO.File.Exists(attachmentToDownload.FilePath + @"\" + attachmentToDownload.FileName))
        {
            var file = System.IO.File.ReadAllBytes(attachmentToDownload.FilePath + @"\" + attachmentToDownload.FileName);
            var extension = Path.GetExtension(attachmentToDownload.FileName);
            MemoryStream memoryStream = new MemoryStream(file);
            byte[] bytes = memoryStream.ToArray();
            memoryStream.Seek(0, SeekOrigin.Begin);
            var contentType = System.Web.MimeMapping.GetMimeMapping(attachmentToDownload.FileName);
            return File(memoryStream, contentType, "test" + extension);
        }
        else
        {
            return null;
        }
    }
    catch (Exception exception)
    {
        exception = exception;
        return null;
    }
}

Приведенный выше код является вызовом по javascript:

$('#buttonTest').click(function () {
    var ENID = $(this).data('enid');
    var FileName = $('#buttonTest').val();
    var formData = "{FileName:'" + FileName + "',ENID:'" + ENID + "'}";
    makeAjaxCall("", '@Url.Action("DownloadAttachment", "eNotice")', formData, "", "", "");
});

1 Ответ

0 голосов
/ 23 апреля 2020

Вот что я делаю: data, в моем случае, это просто имя файла и расширение файла, но ваш, по всей видимости, это файл.

$.ajax({
            url: '@Url.Action("// Action", "// Controller")',
            type: 'POST',
            data: JSON.stringify(data),
            contentType: 'Application/json',
            success: function (result) {
                if (result.success) {
                    window.location.href = '@Url.Action("// Action", "// Controller")
                }
                else {
                    debugger;
                    errorNotification("Error! " + result.message);
                }
            }
        });

In мой контроллер У меня есть глобальное состояние c byte [].

Вызов ajax вызывает метод контроллера, который получает файл и сохраняет его в виде байтового массива, а затем я устанавливаю глобальное состояние c байт [] как результат этого. После этого вы можете вернуть что-либо из этой функции, я вернул bool и сообщения, если преобразование в байт [] не удалось.

В случае успеха ajax у меня есть windows. location.href, который вызывает действие контроллера, которое просто возвращает File представлению.

return File(_fileContents, "application/force-download", "test" + extension);

_fileContents в моем случае, имя глобальной установки c byte [], установленной ранее .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...