Member 14803832 Ответов: 0

Как получить "большой" файл из базы данных в MVC с помощью AJAX


После загрузки файла размером более 0,5 мб в базу данных SQL мой AJAX-вызов попадает в ошибку:
function(){if(a){var t=a.length;(function r(t){V. each(t,function(t,n){var i=v. type(n);i==="function"?(!e.unique||!c.has(n))&&a.push(n):n&&n.length&&i!=="string"&&r(n)})})(arguments),i?o=a.length:n&&(s=t,l(n))}верните это}

может ли кто-нибудь сказать мне, что я делаю здесь неправильно и как показать имя файла в пользовательском интерфейсе?

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

Мой Аякс:

function loadFileData() {

    $.ajax({
        type: "GET",
        url: "/File/FileIndex",
        dataType: "JSON",
        success: function (data) {
            $.each(data, function (i, val) {
                var trow = $('<tr/>').data("id", val.id);
                var trowa = $('<tr/>');
                var trowb = $('<tr/>').data("id", val.id);
                trow.append('<td colspan="2"><a href="#" class="FileDownload">' + val.Name + '</a>' + " " + '</td>');
                trowa.append('<td><input type="file" id="FileUpload" /></form></td>');
                trowb.append('<td><input type="button" class="btnUpload" value="Upload File" /><input type="button" id="btnClear" value="Clear" /></td>');

                tab.append(trow);
                tab.append(trowa);
                tab.append(trowb);

            });
            $("#showFiles").html(tab);
        },
        error: function (err) {
            alert("Failed! Please try again." + err.error);
        }
       });
     }


мой контроллер:

[HttpPost]
        public JsonResult UpdateJsionFile(int? id, HttpPostedFileBase file)
        {
            byte[] bytes;
            //decimal fileSize = 100;
            var supportedTypes = new[] { "txt","doc","docx","pdf", "xls", "xlsx", "png" };
            var fileExt = System.IO.Path.GetExtension(file.FileName).ToLower().Substring(1);
            using (BinaryReader br = new BinaryReader(file.InputStream))
            {
                bytes = br.ReadBytes(file.ContentLength);
            }

            if(!supportedTypes.Contains(fileExt))
            {
                return Json(new { success = false, error = "File extention is invalid - upload only WORD/PDF/EXCEL/TXT/PNG files" }, JsonRequestBehavior.AllowGet);
            }


            if(file.FileName.Length>50 )
            {
                return Json(new { success = false, error = "File name is too long, max. 50 symbols" }, JsonRequestBehavior.AllowGet);
            }

            if (file.ContentLength > 4096)
            {
                return Json(new { success = false, error = "File size is too big, max 10MB" }, JsonRequestBehavior.AllowGet);
            }


            using (FileDBEntities db = new FileDBEntities())
            {
                tblFile f = db.tblFiles.Where(p => p.id == id).FirstOrDefault();

                f.Name = Path.GetFileName(file.FileName);
                f.ContentType = file.ContentType;
                f.Data = bytes;

                db.SaveChanges();
            }
            return Json(new { success = true }, JsonRequestBehavior.AllowGet);

        }



с "маленькими" файлами ошибок нет. Странно, что с нормальным кодом razor он работает нормально... ошибка в соответствии с xhr.status - "500", но почему он работает тогда с небольшими файлами???

Patrice T

а сообщение об ошибке есть ?

Member 14803832

function(){if(a){var t=a.length;(function r(t){V. each(t,function(t,n){var i=v. type(n);i==="function"?(!e.unique||!c.has(n))&&a.push(n):n&&n.length&&i!=="string"&&r(n)})})(arguments),i?o=a.length:n&&(s=t,l(n))}верните это}

Patrice T

это не похоже на сообщение об ошибке.

Member 14803832

Да, это именно то сообщение, которое я получаю, когда выполняется ajax-вызов

Member 14803832

ошибка: функция (ошибаться) {
тревога("не удалось! Пожалуйста, попробуйте еще раз." + err.error);
}

F-ES Sitecore

Нет, это объект запроса. Функция error имеет три параметра, и фактическая ошибка находится в тех, которые вы не используете. Обратитесь к документации;

https://api.jquery.com/jquery.ajax/

Member 14803832

jqXHR , textStatus, errorThrown возвращают мне тот же текст:

function(){if(a){var t=a.length;(function r(t){V. each(t,function(t,n){var i=v. type(n);i==="function"?(!e.unique||!c.has(n))&&a.push(n):n&&n.length&&i!=="string"&&r(n)})})(arguments),i?o=a.length:n&&(s=t,l(n))}верните это}

Member 14803832

ошибка "500", на стороне сервера, но почему она работает тогда с небольшими файлами?

Patrice T

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.

Richard Deeming

Проверьте журнал событий приложения на сервере, чтобы узнать, что такое фактическое сообщение об ошибке.

Возможно, вы попали в пределы запроса.
Ограничения запросов <requestLimits> | Microsoft Docs[^]

Member 14803832

Привет, Ричард,как это сделать?

Member 14803832

Консоль показывает мне эту строку как ошибку:
то XHR.отправить((параметры.hasContent и усилитель; & опционы.данных) || нуль);

Member 14803832

Сообщение "не удалось загрузить recource, сервер отвечает со статусом 500 ()"

Richard Deeming

"Статус 500" просто означает, что что-то пошло не так на сервере. Проверьте журнал событий приложения на сервере, чтобы получить реальные сведения об ошибке.

0 Ответов