Ajax 不能通过从数据库中检索大文件来工作

Posted

技术标签:

【中文标题】Ajax 不能通过从数据库中检索大文件来工作【英文标题】:Ajax doesn't work by retrieving big file from database 【发布时间】:2020-12-01 09:47:04 【问题描述】:

每次从 SQL 数据库 ajax 中检索超过 0.5MB 的文件都会出错,我在这里做错了什么?

$(document).ready(function () 

loadFileData();


  );

  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">' + escape(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 (error) 
        alert("Failed! Please try again." + error);
    
);
var tab = $('<table style="width:100px" border=1 class=MyTable></table>');
   

我的控制器:

//GET: File
    public JsonResult FileIndex()
    

        List<tblFile> fileList = new List<tblFile>();
        using (FileDBEntities db = new FileDBEntities())
        
            fileList = db.tblFiles.ToList();
        

        return new JsonResult  Data = fileList, JsonRequestBehavior = JsonRequestBehavior.AllowGet ;
    

对于小文件,它可以完美运行,但为什么它会因检索超过 0.5MB 的文件而崩溃? 消息,我收到了什么:

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))return this

【问题讨论】:

错误是什么? 如何查看? 这仅发生在生产环境中还是您可以在开发环境中重现它?如果您可以在开发环境中重现它,则可以使用调试器查看错误(以及可能的其他有用信息)。如果您还没有学会如何使用调试器,那应该是您的下一个任务。 是的,我应该,但我不明白为什么它适用于小文件? 我可以在控制台中看到以下错误:1. GET localhost:44395/resources/demos/style.css net::ERR_ABORTED 404 2. bootstrap.js:15 未捕获错误:Bootstrap 的 javascript 需要 jQuery 版本 1.9.1 或更高版本, 但低于版本 4 3.GET localhost:44395/File/FileIndex 500 【参考方案1】:

我认为你应该:

你的控制器:你应该返回二进制 ||文件流

//GET: File
public JsonResult FileIndex()


    List<byte> fileList = new List<byte>();
    using (FileDBEntities db = new FileDBEntities())
    
        fileList = db.tblFiles.ToList();
        
        foreach(var itemFile in fileList) 
           fileList.add(File.ReadAllBytes(itemFile));
        
    
    return new JsonResult  Data = fileList, JsonRequestBehavior = JsonRequestBehavior.AllowGet ;

【讨论】:

有2个错误:“文件”在当前比赛中无效,不能隐式转换类型 第一个错误属于 fileList = db.tblFiles.ToList();第二个到 fileList.add(File.ReadAllBytes(itemFile));

以上是关于Ajax 不能通过从数据库中检索大文件来工作的主要内容,如果未能解决你的问题,请参考以下文章

如何通过从数据库中获取值来制作可靠的下拉列表

HandsonTable 通过从 ajax 加载对数据进行排序

通过从源 CSV 复制和修改现有记录多次来创建新的 CSV

通过从 javascript 文件中查询数据库,根据下拉菜单中的选择更新 div 内容

通过从上到下滚动表格来刷新 UITable 内容

如何通过从 aspx.cs 文件中获取参数来执行数据库 CRUD 操作?